[Windows] BAT 파일에서 대기(Sleep)

배치 파일(.bat)로 테스트 스크립트를 작성하다보면 sleep 해야 할 경우가 생기는데 이 경우 다음과 같이 하면 된다.

ping -n 초 127.0.0.1 >nul

또는

timeout /t 초 /nobreak > NUL

timeout 은 Windows 7 에서부터 되는 거 같은데(XP에선 없었던 거 같은데..) 유용하다. /nobreak 옵션을 주면 배치 파일에서 Ctrl + C를 눌러도 멈출 수가 없으니 웬만하면 빼자-_-;;

참고 : 
http://stackoverflow.com/questions/4317020/windows-batch-sleep

Windows Batch 파일(.BAT)에서 IF 문에서 수식 사용

IF 문에서 수식을 사용하고 싶을 때, 예를 들면, 에러 체크를 위해 루프를 도는 개수등을 카운트하고 싶다면 SET 에서 /A 옵션을 사용하고 IF에서 비교 연산자를 사용하면 된다. IF 문의 비교 연산자는 다음과 같다

EQU – 같음
NEQ – 같지 않음
LSS – 보다 작은
LEQ – 작거나 같음
GTR – 보다 큰
GEQ – 크거나 같음

다음은 start 로 3가지 일을 동시에 처리한 후 goto와 label을 이용, cygwin의 delay로 일정 시간 체크한 후 그 후 에러로 처리하는 bat 파일의 예다.

@echo off
SET /A LOOP_COUNT=1
SET /A LOOP_MAX_COUNT=5
SET CYGWIN_DELAY=[Cygwin 경로]\delay.exe
SET DELAY_TIME=5m

rem WORK1, 2, 3를 동시에 돌린다. 다음 작업에 dependency 가 있는 작업에
rem start의 /W 옵션을 주어 기다리도록 한다.

start WORK1.bat
start WORK2.bat
start /W WORK3.bat

goto CHECK

:DELAY
rem if LOOP_COUNT >= LOOP_MAX_COUNT
IF %LOOP_COUNT% GEQ %LOOP_MAX_COUNT% (

echo ERROR!

exit 1

)
rem Delay 한다.
%CYGWIN_DELAY% %DELAY_TIME%

rem LOOP_COUNT += 1
SET /A LOOP_COUNT+=1

:CHECK
echo Checking…
IF [WORK1 실패조건] (


echo Work 1 is Failed!

goto DELAY

)
echo Work1 is success!
IF [WORK2 실패조건] (

echo Work 2 is Failed!

goto DELAY

)
echo Work2 is success!
IF [WORK3 실패조건] (

echo Work 3 is Failed!

goto DELAY

)
echo Work3 is success!

call WORK4.bat

Windows Batch 파일(.BAT)에서 Exit code 조정

Windows의 Batch 파일에서 Exit code를 원하는 값으로 설정하고 종료하고 싶다면..

exit /B <exitCode>

Batch 파일 안에서 Exit code 는 ERRORLEVEL 환경변수(%ERRORLEVEL%) 로 접근할 수 있다.