web-dev-qa-ko.com

배치 파일에서 잠자는 방법?

명령과 다음 파일 사이의 Windows 배치 파일에서 잠시 동안 실행을 일시 중지하는 방법은 무엇입니까?

141
Massimo

배치 파일에서 절전 모드로 전환하는 올바른 방법은 Windows 2000에 도입 된 timeout 명령을 사용하는 것입니다.

대기 29 초에서 30 초 사이 :

timeout /t 30

사용자가 아무 키나 누르면 시간 초과가 중단됩니다. 그러나이 명령은 옵션 스위치 /nobreak, 명시 적 CTRL-C :

timeout /t 30 /nobreak

또한 명령이 화면에 카운트 다운을 인쇄하지 않게하려면 출력을 NUL로 리디렉션 할 수 있습니다.

timeout /t 30 /nobreak > NUL
209
Massimo

여기에도 적용되므로 다른 사이트의 답변 를 복사합니다.

핑을 사용하려면 더 좋은 방법이 있습니다. 존재하지 않는 주소를 핑하려는 경우 밀리 초 단위로 시간 초과를 지정할 수 있습니다. 다행히 이러한 주소는 표준 (RFC 3330)에 정의되어 있으며 192.0.2.x. 이것은 구성이 아니며 실제로 존재하지 않는 유일한 목적을 가진 주소입니다 (명확하지는 않지만 로컬 네트워크에서도 적용됩니다).

192.0.2.0/24-이 블록은 문서 및 예제 코드에서 사용하기 위해 "TEST-NET"으로 지정됩니다. 벤더 및 프로토콜 문서에서 도메인 이름 example.com 또는 example.net과 함께 사용되는 경우가 많습니다. 이 블록 내의 주소는 공용 인터넷에 나타나지 않아야합니다.

123 밀리 초 동안 절전 모드로 전환하려면 ping 192.0.2.1 -n 1 -w 123 >nul

16
mafu

Localhost에 ping을 삽입 할 수도 있습니다. 완료하는 데 4 초가 걸립니다 (기본적으로). 일부에서는 kludge로 간주되지만 완전히 동일하게 작동합니다.

명령 :
핑 127.0.0.1

8
acolyte

면책 조항 : 이것은 "이상적인"해결책이 아니므로 ping...

가능하면 timeout를 사용하십시오. 그러나 의견에서 언급했듯이 항상 옵션이 아닙니다 (예 : 비 대화 형 모드). 그 후, 나는 ping "kludge"가 아마도 가장 간단한 옵션 일 것입니다. 즉, 다른 옵션을 제공합니다 ... 일부 VB Script를 포함하십시오.

이 솔루션의 기초에는이 외에도 다양한 종류의 응용 프로그램이 있습니다. 종종 VBS는 배치가 할 수없는 일을 할 수 있거나 최소한 훨씬 더 쉽게 할 수 있습니다. 여기에 설명 된 기술을 사용하여 두 가지 ( "완벽하게"가 아니라 "기능적으로"...)를 혼합 할 수 있습니다.

다음은 임시 스크립트를 생성하고 실행 한 다음 삭제하는 하나의 라이너입니다. 스크립트는 수면을 수행합니다 (이 예에서는 3 초 동안).

echo WScript.Sleep 3000 > %temp%\sleep.vbs & cscript %temp%\sleep.vbs %sleepMs% //B & del %temp%\sleep.vbs

약간 다르게 작성된 기본적으로 동일한 내용이 있습니다.

set sleepMs=3000 & set sleepVbs=%temp%\sleep.vbs & echo WScript.Sleep WScript.Arguments(0) > %sleepVbs% & cscript %sleepVbs% %sleepMs% //B & del %sleepVbs%

마지막으로 ping와 같이 CScript 자체에는 시간 초과 옵션이 있습니다! 따라서 스크립트에 무한 루프를 입력하면 인터프리터가 지속 시간을 적용하도록 할 수 있습니다. 참고로이 작업은 CPU를 사용하는 "바쁜"작업이므로 WScript.Sleep 절차이지만 완전성을 위해 개념적 옵션으로 제공합니다.

set sleepSec=3 & set sleepVbs=%temp%\sleep.vbs & echo While True > %sleepVbs% & echo Wend >> %sleepVbs% & cscript %sleepVbs% //B //T:%sleepSec% & del %sleepVbs%
3
BuvinJ