您好我被截止日期推迟,所以我会在此处发布我的问题,因为我继续搜索...我的脚本也是如此,它只是查看文件夹的每个文件,并根据" 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上使用批处理脚本将其选择为选项。
答案 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个循环的内循环来完成同样的事情。