batch-file – 如何在继续之前等待for循环完成批处理?

我目前有一个批处理脚本,我用它来将一个大型zip文件从网络文件夹复制到网络上的多台机器上.我需要并行执行这些副本,所以我有一个遍历地址的for循环并运行启动robocopy.这就是我所拥有的

for /F "tokens=*" %%A in (IPlist.txt) do (

    start robocopy "\\networkfolder" \\%%A
)

问题是我需要在我刚复制到的所有机器上执行提取,但我需要等到机器人完成后再进行.我不能在for循环中使用start / wait,因为它会破坏并行副本.有没有办法可以强制脚本等到所有的机器人都完成了?或者可能是替代解决方案?

仅供参考:我无法首先在网络文件夹中提取,因为zip是很多小文件并且严重降低了传输速率.通过网络复制时,它需要是一个大文件.

最佳答案

setlocal EnableDelayedExpansion
set number=0
for /F "tokens=*" %%A in (IPlist.txt) do (
    set /A number+=1
    echo Flag > roboRunning.!number!
    start robocopy "\\networkfolder" \\%%A ^& del roboRunning.!number!
)

:wait
if exist roboRunning.* goto wait

echo All robocopy processes have finished here
点赞