
다음과 같은 스크립트가 있습니다.
@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
건배