본문 바로가기

TroubleShooting/Windows

윈도우 batch 스크립트에서 잠시 멈추는(sleep) 여러 방법

728x90

1. timeout

batch 스크립트 대화식(interactive)으로 동작하는 환경에서 설정한 시간값대로 아무 문제 없시 잠시 멈춘다.

@echo off 
echo Hello, World
:: timeout /t -1
timeout 5
echo World is Beautiful

exit 0

a.bat 는 "Hello, World" 를 출력하고 5초를 기다린 후, "World is Beautiful" 을 출력하고 있다.

 

그런데, timeout 의 문제는 비대화식(non-interactive) 환경에서는 시간 설정값은 무시되고 그 다음 라인이 진행된다.


프로그램 내에서 외부 명령어 호출하는 다음 예제를 실행하면 5초후에 결과가 나오는게 아니라, 실행 즉시 a.bat 결과가 출력된다.

String[] array = {"cmd", "/c", "a.bat"};
Process process = Runtime.exec(array);
process.waitFor(20, TimeUnit.SECONDS);

 

2. ping

ping 명령어로 로컬 주소인 127.0.0.1 로 1초마다 5번 보내는 방법으로 blocking 이 가능하다.

@echo off 
echo Hello, World
ping 127.0.0.1 -n 5 > nul
echo World is Beautiful

exit 0

3. powershell Sleep

@echo off 
echo Hello, World
powershell Start-Sleep -s 5
:: powershell Sleep 3
echo World is Beautiful

exit 0

 

윈도우 PowerShell 내 명령어인 "Start-Sleep" 을 이용하면 멈추기 기능이 가능하다.

 

참고

https://stackoverflow.com/questions/1672338/how-to-sleep-for-five-seconds-in-a-batch-file-cmd