等待通过调用批处理文件创建的进程已完成

时间:2013-12-02 15:41:38

标签: batch-file command-line command-prompt windows-shell

MyFile1.bat两次调用MyFile2.bat

start MyFile2.bat argA, argB, argC
start MyFile2.bat argX, argY, argZ

此时,我怎么能等到MyFile2.bat的调用产生的两个进程都完成了?

4 个答案:

答案 0 :(得分:7)

简单使用Start / WAIT参数。

start /wait MyFile2.bat argA, argB, argC
start /wait MyFile2.bat argX, argY, argZ

答案 1 :(得分:3)

start /w cmd /c "start cmd /c MyFile2.bat argA, argB, argC & start cmd /c MyFile2.bat argA, argB, argCt"

根据我的测试,这应该可以提供MyFile2.bat。最终应该使用bat文件的完整路径。

答案 2 :(得分:3)

您可以使用“状态文件”来了解;例如,在MyFile1.bat中执行以下操作:

echo X > activeProcess.argA
start MyFile2.bat argA, argB, argC
echo X > activeProcess.argX
start MyFile2.bat argX, argY, argZ
:waitForSpawned
if exist activeProcess.* goto waitForSpawned

并在MyFile2.bat:

的末尾插入此行
del activeProcess.%1

您还可以在等待周期中插入ping延迟,以便在此循环中浪费更少的CPU。

答案 3 :(得分:2)

你可以这样做:

start MyFile2.bat argA, argB, argC
start MyFile2.bat argX, argY, argZ ^& echo.^>End.val ^& exit

:testEnd
if exist end.val (del end.val
                  echo Process completed
                  pause)
>nul PING localhost -n 2 -w 1000
goto:testEnd

当第二个start2.bat完成作业时,将创建一个文件“End.val”,您只需要测试该文件是否存在,然后您就知道您的过程已完成。

如果第一个myfile2可能需要更多时间来执行,那么第二个你可以使用第一个start myfile2.bat执行相同的操作(使用另一个文件名),并在:testend

中进行更多测试
 start MyFile2.bat argA, argB, argC ^& echo.^>End1.val ^& exit
 start MyFile2.bat argX, argY, argZ ^& echo.^>End.val ^& exit

:testEnd
if exist end.val if exist end1.val (del end.val
                                    del end1.val
                                    echo Process completed
                                    pause)
>nul PING localhost -n 2 -w 1000
goto:testEnd