"start cmd /c"를 여러 번 실행하면 일시 중지 명령이 순서대로 실행되지 않습니다.

"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회) 후에 "서비스 중지 중..."을 기다리지 않도록 사용해야 합니다 . 모든 @start /b cmd /c net stop "Service"명령이 완료될 때까지 기다렸다가 일시 중지를 실행하도록 cmd에 지시할 수 있는 방법이 있습니까 ?

내가 말하는 내용을 보려면 다음 배치 파일을 실행하십시오.

@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

건배

관련 정보