![Команда Pause выполняется неправильно при многократном запуске «start cmd /c»](https://rvso.com/image/1592546/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0%20Pause%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D1%82%D1%81%D1%8F%20%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%20%D0%BF%D1%80%D0%B8%20%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%BC%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B5%20%C2%ABstart%20cmd%20%2Fc%C2%BB.png)
У меня есть такой скрипт:
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
pause
Однако pause
команда выполняется до того, как будут выполнены все строки выше в скрипте. Мне нужно использовать @start /b cmd /c
так, чтобы не приходилось ждать "Остановка службы..." после каждой службы (около 100) времени. Есть ли способ заставить cmd ждать, пока все команды не @start /b cmd /c net stop "Service"
будут выполнены, а затем запустить паузу?
Чтобы понять, о чем я говорю, запустите этот пакетный файл:
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
pause
Вместо того, чтобы Pause
произойти после того, как все Hello
были напечатаны, это происходит в середине:
решение1
Команда start
запускает приложение в своем собственном контексте, отдельно от того, что делает ваша текущая консоль, поэтому, когда она будет завершена, она вернет вывод, как только ваш текущий терминал закончит с тем, что делает. Вот почему, даже если вы отправляете все эти команды запуска, ваша пауза не ждет, пока все они завершатся, она просто ждет достаточно долго, чтобы запустить процессы, вот почему вы pause
появляетесь в середине них, это просто вопрос времени.
Таким образом, чтобы решить вашу проблему, вы можете подождать, пока они закончат работу, /wait
или вызвать второй пакетный скрипт, таким образом вы можете ждать выполнения некоторых команд и не ждать выполнения других, если вам так удобнее:
Техника ожидания вашего сценария
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
pause
Техника с лаучер скриптом
@echo off
title Laucher
:: This scripts don't need to be waited
start /b cmd /c 'script1.bat'
:: This script needs to be waited
start /wait /b cmd /c 'script2.bat'
Скрипт1
@echo off
title Script to run without waiting
SomeProcessThatDoesn'tNeedsToBeWaited
Скрипт2
@echo off
title Script to run to be waited
SomeProcessThatNeedsToBeWaited
ваше здоровье