명령과 다음 파일 사이의 Windows 배치 파일에서 잠시 동안 실행을 일시 중지하는 방법은 무엇입니까?
명령과 다음 파일 사이의 Windows 배치 파일에서 잠시 동안 실행을 일시 중지하는 방법은 무엇입니까?
답변:
배치 파일에서 잠자기하는 올바른 방법 timeout
은 Windows 2000에 도입 된 명령 을 사용하는 것 입니다.
29 초에서 30 초 사이의 대기 시간 :
timeout /t 30
사용자가 아무 키나 누르면 시간 초과가 중단됩니다. 그러나이 명령은 또한 선택적 switch를 허용합니다.이 스위치 /nobreak
는 명시 적을 제외하고 사용자가 누를 수있는 모든 것을 무시합니다 CTRL-C
.
timeout /t 30 /nobreak
또한 명령이 화면에 카운트 다운을 인쇄하지 않게하려면 출력을 NUL
다음으로 리디렉션 할 수 있습니다 .
timeout /t 30 /nobreak > NUL
여기에도 적용되므로 다른 사이트에서 답변을 복사 합니다 .
핑을 사용하려면 더 좋은 방법이 있습니다. 존재하지 않는 주소를 핑하려는 경우 밀리 초 단위로 시간 초과를 지정할 수 있습니다. 다행히 이러한 주소는 표준 (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
Ping
단순히 작업에 대한 잘못된 도구입니다.
localhost에 ping을 삽입 할 수도 있습니다. 완료하는 데 4 초가 걸립니다 (기본적으로). 일부에서는 kludge로 간주되지만 완전히 동일하게 작동합니다.
명령 :
ping 127.0.0.1
ping
OS와 함께 제공 되는지 여부에 대해 걱정해야합니다 . '95'98 또는 ME에 대해 충분히 걱정한다면 6.22에 대해 똑같이 걱정해야 ping
합니다
면책 조항 : 이것은 "이상적인"솔루션이 아니므로 권장하는 사람들과 같은 일로 나를 머리 위로 때리게하지 마십시오 ping
...
가능하면 사용 timeout
하십시오. 그러나 의견에서 언급했듯이 항상 옵션이 아닙니다 (예 : 비 대화식 모드). 그 후, 나는 ping
"kludge"가 아마도 가장 간단한 옵션 일 것입니다. 즉, 다른 옵션을 제공합니다 ... VB 스크립트를 포함하십시오 .
이 솔루션의 기초에는이 외에도 다양한 종류의 응용 프로그램이 있습니다. 종종 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%