2013-12-02 3 views

ответ

7

Простое использование старте/WAIT.

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

Или измените 'start' на' call', это была моя первая мысль. Однако, возможно, они хотят, чтобы два вызова выполнялись параллельно. В этом случае ни ваше предложение, ни мое действительно было бы уместным. –

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

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

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 в этом цикле.

+0

+1, но чтобы убедиться, что с разрешениями не существует проблем, возможно, было бы неплохо создать файлы флагов в каталоге '% TEMP%'. И, вероятно, я бы добавил небольшую задержку между ': waitForSpawned' и условием, а также я бы ввел строку' del' (кстати, вы имели в виду 'del activeProcess. *') В начале * сценарий, чтобы быть в безопасности, если сценарий неожиданно прерван. –

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 
Смежные вопросы