!["start cmd /c"를 여러 번 실행하면 일시 중지 명령이 순서대로 실행되지 않습니다.](https://rvso.com/image/1592546/%22start%20cmd%20%2Fc%22%EB%A5%BC%20%EC%97%AC%EB%9F%AC%20%EB%B2%88%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A9%B4%20%EC%9D%BC%EC%8B%9C%20%EC%A4%91%EC%A7%80%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%88%9C%EC%84%9C%EB%8C%80%EB%A1%9C%20%EC%8B%A4%ED%96%89%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..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회) 후에 "서비스 중지 중..."을 기다리지 않도록 사용해야 합니다 . 모든 @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
건배