Windows 简单批处理 "Multithread" 处理

Windows Simple Batch "Multithread" Processing

您好,我的截止日期很紧迫,所以我会 post 在进行搜索时在这里提出我的问题..这是我的脚本,它所做的只是查看 每个文件一个文件夹,并根据[=28的创建不同的"list.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%[=12=]_10.txt)
        IF %%~nxI==%%A IF %%B GTR 10.000 IF %%B LEQ 25.000 (
            echo %%~dpnxI >> %inputDir%_25.txt)
        IF %%~nxI==%%A IF %%B GTR 25.000 IF %%B LEQ 40.000 (
            echo %%~dpnxI >> %inputDir%_40.txt)
        IF %%~nxI==%%A IF %%B GTR 40.000 IF %%B LEQ 55.000 (
            echo %%~dpnxI >> %inputDir%_55.txt)
        IF %%~nxI==%%A IF %%B GTR 55.000 (
            echo %%~dpnxI >> %inputDir%_plus.txt)
        )
    )

我的目标是修改此代码以使用 多线程处理,这似乎是在 Windows 7.[=13= 上使用批处理脚本的一个选项]

你的问题是一种方法。

因为你有 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%[=10=]_10.txt
        ) else (
        IF %%B LEQ 25.000 (
            echo %inputDir%\%%A >> %inputDir%_25.txt
        ) else (
        IF %%B LEQ 40.000 (
            echo %inputDir%\%%A >> %inputDir%_40.txt
        ) else (
        IF %%B LEQ 55.000 (
            echo %inputDir%\%%A >> %inputDir%_55.txt
        ) else (
            echo %inputDir%\%%A >> %inputDir%_plus.txt
        )))))
    )

应该只使用 50,000 个内循环周期就可以完成同样的事情。