代码之家  ›  专栏  ›  技术社区  ›  Steeve Brissette

Windows简单批处理“多线程”处理

  •  0
  • Steeve Brissette  · 技术社区  · 7 年前

    嗨,我被截止日期逼到了,所以我会在搜索过程中把我的问题贴在这里。。这是我的剧本,它所做的就是看 文件夹的每个文件 ,并创建不同的 “list.txt” 取决于 价值 属于 “tree\u size.txt” 格式为CSV。txt(文件名,大小):

    FOR %%I in (%inputDir%\*.*) DO (
        FOR /F "tokens=1,2" %%A IN (%tree_size%) DO (
            IF %%~nxI==%%A IF %%B LEQ 10.000 (
                echo %%~dpnxI >> %inputDir%\0_10.txt)
            IF %%~nxI==%%A IF %%B GTR 10.000 IF %%B LEQ 25.000 (
                echo %%~dpnxI >> %inputDir%\11_25.txt)
            IF %%~nxI==%%A IF %%B GTR 25.000 IF %%B LEQ 40.000 (
                echo %%~dpnxI >> %inputDir%\26_40.txt)
            IF %%~nxI==%%A IF %%B GTR 40.000 IF %%B LEQ 55.000 (
                echo %%~dpnxI >> %inputDir%\41_55.txt)
            IF %%~nxI==%%A IF %%B GTR 55.000 (
                echo %%~dpnxI >> %inputDir%\56_plus.txt)
            )
        )
    

    我的目标是修改此代码以使用 多线程处理 ,这将是在Windows 7上使用批脚本的一个选项。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Magoo    7 年前

    你的问题是方法之一。

    因为您有50000个文件,并且假设您的 tree_size 文件(您没有给我们一个样本),然后您正在阅读 tree\u大小 50000次,执行 if 树50000*50000=2500000000次。每个比较块每次进行5次测试=1250000000次测试。

    尝试以下操作:

    FOR /F "tokens=1,2" %%A IN (%tree_size%) DO if exist "%inputDir%\%%A" (
            IF %%B LEQ 10.000 (
                echo %inputDir%\%%A >> %inputDir%\0_10.txt
            ) else (
            IF %%B LEQ 25.000 (
                echo %inputDir%\%%A >> %inputDir%\11_25.txt
            ) else (
            IF %%B LEQ 40.000 (
                echo %inputDir%\%%A >> %inputDir%\26_40.txt
            ) else (
            IF %%B LEQ 55.000 (
                echo %inputDir%\%%A >> %inputDir%\41_55.txt
            ) else (
                echo %inputDir%\%%A >> %inputDir%\56_plus.txt
            )))))
        )
    

    只需使用50000个内部循环即可完成相同的任务。