Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在继续之前,如何等待for循环成批完成?_Batch File - Fatal编程技术网

Batch file 在继续之前,如何等待for循环成批完成?

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,因

我目前有一个批处理脚本,用于将一个大的zip文件从网络文件夹复制到网络上的多台计算机。我需要并行地复制这些副本,所以我有一个for循环,它通过地址运行,并运行start robocy。这是我得到的

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