Команда Pause выполняется неправильно при многократном запуске «start cmd /c»

Команда Pause выполняется неправильно при многократном запуске «start cmd /c»

У меня есть такой скрипт:

@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

ваше здоровье

Связанный контент