Ожидание завершения процесса, созданного путем вызова пакетного файла
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