Ожидание завершения процесса, созданного путем вызова пакетного файла

MyFile1.bat вызывает MyFile2.bat дважды:

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

на данный момент, как я могу ждать, пока оба процесса порожденные звонки MyFile2.bat закончили?

4 ответов


просто используйте параметр Start / WAIT.

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

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

по моим тестам это должно работать при условии, что MyFile2.летучая мышь.В конечном итоге следует использовать полные пути к файлам bat.


вы можете использовать "файлы состояния", чтобы знать это; например, в MyFile1.летучая мышь делает следующее:

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.летучая мышь:

del activeProcess.%1

вы также можете вставить ping задержка в цикле ожидания, чтобы тратить меньше CPU в этом цикле.


вы можете сделать это так :

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 finish-это работа, а затем файл "конец".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