выйдите/B 0 не работает

У меня есть следующая проблема:

Я создал сценарий пакетной обработки, который называет себя там (для способности записать журнал параллельно). В сценарии я запускаю другой процесс (как start startServer.bat) который запускает процесс Java и сохраняет открытым все время.

В моем исходном сценарии я ожидаю 30 секунд, проверяю, работает ли процесс, и сделайте:

exit /B 0

К сожалению, это не работает, окно показывает, что выход/B 0 оценивается, но окно все еще сохраняет открытым. Когда я закрываю окно с другим процессом (значение "дочерних" процессов, запущенных в моем .bat), мой сценарий продолжает свое выполнение.

Так:

scriptA.bat

-> in there I call: start startServer.bat
-> wait 30 seconds
-> check is server is started
-> exit /B 0
Process hangs up!

Что очень нечетно, если я переношу другой сценарий, как:

scriptB.bat

-> call scriptA.bat
-----> in there I call: start startServer.bat
-----> wait 30 seconds
-----> check if server is started
-----> exit /B 0
-> scriptA.bat continues without any hangup!

Я также попробовал то же выходом 0 (без/B) также, тот же результат! В первом случае это зависает во втором случае мои завершения окна как ожидалось...

Кто-либо из Вас когда-либо имел такую проблему прежде и знаешь что случилось здесь? Процесс зависает!

6
задан Nifle 23 June 2010 в 10:16
поделиться

2 ответа

Здесь есть хорошее объяснение всех вариантов выхода из пакетного сценария: http://www.robvanderwoude.com/exit.php

В частности, с этой страницы:

Интерактивная справка DOS (HELP EXIT) не дает понять, что параметр / B выходит из текущего экземпляр сценария, который не обязательно совпадает с выходом из текущего сценария. Т.е. если сценарий находится в ВЫЗВАННОЙ части кода, EXIT / B завершает ВЫЗОВ, а не сценарий.

Таким образом, вы определенно не хотите exit / b 0 в этом случае. Если просто exit 0 не работает, попробуйте GOTO: EOF .

8
ответ дан 16 December 2019 в 21:35
поделиться

Думаю, ваша проблема заключается в команде start . Следующий отрывок из start /? help может указывать на проблему:

команда / программа

Если это внутренняя команда cmd или командный файл, затем командный процессор запускается с переключателем / K на cmd.exe. Это означает, что окно останется после того, как команда была запущена.

Если это не внутренняя команда cmd или командный файл, тогда это программа и будет работать как оконный приложение или консольное приложение.

В качестве решения вы можете попробовать изменить команду запуска следующим образом:

start "" cmd /c "startServer.bat"
0
ответ дан 16 December 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: