Batch file 在继续之前,如何等待for循环成批完成?
我目前有一个批处理脚本,用于将一个大的zip文件从网络文件夹复制到网络上的多台计算机。我需要并行地复制这些副本,所以我有一个for循环,它通过地址运行,并运行start robocy。这是我得到的Batch file 在继续之前,如何等待for循环成批完成?,batch-file,Batch File,我目前有一个批处理脚本,用于将一个大的zip文件从网络文件夹复制到网络上的多台计算机。我需要并行地复制这些副本,所以我有一个for循环,它通过地址运行,并运行start robocy。这是我得到的 for /F "tokens=*" %%A in (IPlist.txt) do ( start robocopy "\\networkfolder" \\%%A ) 问题是,我需要在我刚刚复制到的所有机器上执行提取,但我需要等到机器人完成。我不能在for循环中使用start/wait,因
for /F "tokens=*" %%A in (IPlist.txt) do (
start robocopy "\\networkfolder" \\%%A
)
问题是,我需要在我刚刚复制到的所有机器上执行提取,但我需要等到机器人完成。我不能在for循环中使用start/wait,因为这会破坏并行副本。我有没有办法强迫脚本等到所有的机器人玩家都完成了?或者另一种解决方案
仅供参考:我无法先在网络文件夹上解压缩,因为zip包含大量小文件,严重降低了传输速率。通过网络进行复制时,它必须是一个大文件。以下是我的一些代码(批处理文件内部的语法):
这实际上统计了一次运行的可执行文件的数量,但是可以很容易地调整它,只检查是否存在。(对于此代码,它正在检查以确保有一定数量的进程正在运行。)也许您可以在循环中使用
任务列表
命令来检查是否有任何robocopy进程仍在运行,如果有,请休眠一段时间,然后重试?
SETLOCAL ENABLEDELAYEDEXPANSION
set robocopycount=0
:loop
for /F "usebackq" %%e IN (`tasklist /FI "IMAGENAME eq robocopy.exe"`) do if %%e==robocopy.exe set /A robocopycount=!robocopycount!+1
if %robocopycount% GEQ 1 goto continue
rem goto loop
:continue
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
SETLOCAL EnableDelayedExpansion
SET num=0
FOR /F "tokens=*" %%A in (IPlist.txt) do (
SET /A num+=1
ECHO Flag > RoboRunNum.!num!
START robocopy "\\networkfolder" \\%%A ^& del RoboRunNum.!num!
)
:Check
if exist RoboRunNum.* GOTO CHECK
echo Robocopy Processes fave Finished