Windows Simple Batch" Multithread"处理

时间:2018-01-20 23:28:26

标签: multithreading batch-file for-loop text windows-7

您好我被截止日期推迟,所以我会在此处发布我的问题,因为我继续搜索...我的脚本也是如此,它只是查看文件夹的每个文件,并根据" tree_size.txt" 格式的创建不同的" list.txt" as CSV.txt(filename,size):

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 个答案:

答案 0 :(得分:1)

你的问题是方法之一。

由于您有50,000个文件并且假设您的tree_size文件中有50,000行(您尚未向我们提供样本),那么您正在阅读tree_size 50,000次并执行if树50,000 * 50,000 = 2,500,000,000次。每个比较块每次进行5次测试= 12,500,000,000次测试。

试试这个:

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
        )))))
    )

应该只使用50,000个循环的内循环来完成同样的事情。