让许多进程在主进程之前等待

时间:2015-03-08 07:03:32

标签: batch-file cmd dos wait

我有这段代码:

Start "" robocopy F:\DATA1 D:\Backup\  
Start "" robocopy G:\DATA2 D:\Backup\    
Start "" robocopy H:\DATA3 D:\Backup\    
Start "" D:\Backup\rename.bat

如何在执行前使rename.bat等待所有进程?

3 个答案:

答案 0 :(得分:1)

停止使用start。你使用start不要让他们等待。请参阅start /?

答案 1 :(得分:1)

start/wstart /wait选项一起使用。

Start "" /w robocopy F:\DATA1 D:\Backup\  
Start "" /w robocopy G:\DATA2 D:\Backup\    
Start "" /w robocopy H:\DATA3 D:\Backup\    
Start "" D:\Backup\rename.bat

现在rename.bat在前面的命令完成之前不会运行。


来源Start a program, command or batch script (opens in a new window.)

  

<强>语法

     

START "title" [/D path] [options] "command" [parameters]

     

选项:

     

/W/WAIT启动应用程序并等待它终止。                   (对于内部cmd命令或批处理文件,它运行CMD /K

答案 2 :(得分:0)

@ECHO OFF
SETLOCAL
:: first method - use flag files (qtest.bat substituted for robocopy)
:: make a tempfile
:maketemp
SET "tempfile=%temp%\%random%"
IF EXIST "%tempfile%*" (GOTO maketemp) ELSE (ECHO.>"%tempfile%a")
COPY NUL "%tempfile%b">nul&START "" qtestd "%tempfile%b" f:\data1 d:\backup\
COPY NUL "%tempfile%c">nul&START "" qtestd "%tempfile%c" g:\data2 d:\backup\
COPY NUL "%tempfile%d">nul&START "" qtestd "%tempfile%d" h:\data3 d:\backup\
del "%tempfile%a"
:wait
timeout /t 1 >nul
FOR %%a IN (b c d) DO IF EXIST "%tempfile%%%a" GOTO wait
ECHO Start "" D:\Backup\rename.bat
GOTO :EOF

这是一个使用标记文件的过程,应该允许您并行执行副本。

首先,通过使用随机数生成器选择名称,在临时目录中设置一个标志文件,并创建一个带后缀的文件&#34; a&#34;作为一名管理员。

接下来,启动您需要并行运行的每个流程,但是按以下格式将流程放入自己的批处理中:

@ECHO OFF
SETLOCAL
ECHO robocopy %2 %3 %4 %5 %6 %7 %8 %9
PAUSE
DEL %1
EXIT

也就是说,第一个参数是标志文件的名称。在这种情况下,您正在使用其余参数执行 robocopy pause只是模拟robocopy操作。

退出前的最后一个操作是删除标记文件。

提交了所有必需的工作后,删除&#34; a&#34; flagfile并执行:wait循环,直到没有任何标志文件仍然存在,这表示每个辅助批处理文件已经结束。

然后运行您的renane程序(但请更改该名称,因为rename是批处理关键字)

timeout命令可防止批处理成为处理程序占用的;它等了1秒钟。

另一种方法是使用相同的wait循环,但通过执行robocopy并查找以tasklist开头的行,等待没有robocopy.exe个实例。等到没有这样的行,然后继续。