IF 문에서 수식을 사용하고 싶을 때, 예를 들면, 에러 체크를 위해 루프를 도는 개수등을 카운트하고 싶다면 SET 에서 /A 옵션을 사용하고 IF에서 비교 연산자를 사용하면 된다. IF 문의 비교 연산자는 다음과 같다
EQU – 같음
NEQ – 같지 않음
LSS – 보다 작은
LEQ – 작거나 같음
GTR – 보다 큰
GEQ – 크거나 같음
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
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 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 Work1 is success!
IF [WORK2 실패조건] (
echo Work 2 is Failed!
goto DELAY
)
echo Work2 is success!
IF [WORK3 실패조건] (
echo Work2 is success!
IF [WORK3 실패조건] (
echo Work 3 is Failed!
goto DELAY
)
echo Work3 is success!
echo Work3 is success!
call WORK4.bat