컴퓨터잡담

배치파일 IF문

by 디케 posted May 07, 2010
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

배치파일(화일) IF문



If

일괄 프로그램에서 조건부 처리를 수행합니다.

구문

if [noterrorlevel Number Command [else Expression]

if [notString1==String2 Command [else Expression]

if [notexist FileName Command [else Expression]

명령 확장을 사용할 수 있으면 다음 구문을 사용합니다.

if [/iString1 CompareOp String2 Command [else Expression]

ifcmdextversionNumberCommand [else Expression]

ifdefinedVariableCommand [else Expression]

매개 변수

not

조건이 거짓인 경우에만 명령이 실행되도록 지정합니다.

errorlevel Number

이전에 Cmd.exe에 의해 실행된 프로그램이 Number보다 크거나 같은 종료 코드를 반환한 경우에만 참인 조건을 지정합니다.

command

앞의 조건을 충족하면 명령이 실행되도록 지정합니다.

String1==String2

string1과 string2가 같은 경우에만 참인 조건을 지정합니다. 이 값은 리터럴 문자열이나 %1 같은 배치 변수가 될 수 있습니다. 리터럴 문자열에는 따옴표를 사용하지 않아도 됩니다.

exist FileName

FileName이 있으면 참인 조건을 지정합니다.

CompareOp

세 문자의 비교 연산자를 지정합니다. 다음 표는 CompareOp에 유효한 값 목록을 보여 줍니다.

연산자설명

EQU

같음(equal to)

NEQ

같지 않음(not equal to)

LSS

보다 작음(less than)

LEQ

작거나 같음(less than or equal to)

GTR

보다 큼(greater than)

GEQ

크거나 같음(greater than or equal to)

/i

문자열 비교에서 강제로 대/소문자를 무시하게 합니다. if의 string1==string2 형식에 /i를 사용할 수 있습니다. 이러한 비교는 일반적입니다. 즉, string1과 string2가 모두 숫자로 구성되어 있으면 문자열을 숫자로 변환하여 수치 비교를 수행합니다.

cmdextversion Number

Cmd.exe의 명령 확장 기능과 관련된 내부 버전 번호가 Number보다 크거나 같은 경우에만 참인 조건을 지정합니다. 첫째 버전은 1이며 의미있는 향상을 명령 확장에 추가할 때 하나씩 증가합니다. 명령 확장을 사용하지 않는 경우 cmdextversion 조건은 참일 수 없습니다. 기본적으로 명령 확장은 사용 가능하게 설정되어 있습니다.

defined Variable

Variable이 정의된 경우 참인 조건을 지정합니다.

Expression

명령줄 명령과 매개 변수를 지정하여 else 절의 명령으로 전달합니다.

/?

명령 프롬프트에서 도움말을 표시합니다.

설명

if 명령에서 지정한 조건이 참이면 조건을 충족하는 명령이 실행됩니다. 조건이 거짓이면 if 절의 명령은 무시되며 else 절의 명령이 지정되어 있으면 else 절의 모든 명령이 실행됩니다.

프로그램이 중지되면 종료 코드를 반환합니다. 종료 코드를 조건으로 사용하려면 errorlevel을 사용합니다.

definedVariable 사용

definedVariable을 사용하면 세 가지 변수인 %errorlevel%%cmdcmdline% 및 %cmdextversion%이 추가됩니다.

ERRORLEVEL이라는 이름의 환경 변수가 없으면 %errorlevel%은 errorlevel 현재 값의 문자열 표시로 확장합니다. 대신에 이런 경우에는 ERRORLEVEL 값을 얻습니다. 다음 예제에서는 일괄 프로그램을 실행한 후 errorlevel을 사용할 수 있는 방법을 보여 줍니다.

goto answer%errorlevel% :answer0 echo Program had return code 0 :answer1 echo Program had return code 1 goto end :end echo done! 

또한 다음과 같이 CompareOp 비교 연산자를 사용할 수도 있습니다.

if %errorlevel% LEQ 1 goto okay

CMDCMDLINE라는 이름의 환경 변수가 없다면 %cmdcmdline%은 Cmd.exe가 처리하기 전에 Cmd.exe로 전달된 원래의 명령줄로 확장됩니다. 대신에 이런 경우에는 CMDCMDLINE 값을 얻습니다.

CMDEXTVERSION이라는 이름의 환경 변수가 없으면 %cmdextversion%은 cmdextversion 현재 값의 문자열 표시로 확장합니다. 대신에 이런 경우에는 CMDEXTVERSION 값을 얻습니다.

else 절 사용

else절은 if 다음에 오는 명령과 같은 줄에 사용해야 합니다. 예를 들면 다음과 같이 지정합니다.

IF EXIST FileName. (del FileName. ) ELSE ( echo FileName. missing. )

새 줄에서 del 명령을 종료해야 하므로 다음 코드는 작동하지 않습니다.

IF EXIST FileName. del FileName. ELSE echo FileName. missing

else절은 if 명령의 끝과 같은 줄에 사용해야 하므로 다음 코드는 작동하지 않습니다.

IF EXIST FileName. del FileName. ELSE echo FileName. missing

한 줄에서 모두 포맷하려면 다음과 같은 원래 명령문의 형식을 사용합니다.

IF EXIST FileName. (del FileName.) ELSE echo FileName. missing

Product.dat 파일을 찾을 수 없을 경우 "Cannot find data file"이라는 메시지를 표시하려면 다음과 같이 입력합니다.

if not exist product.dat echo Cannot find data file 

A 드라이브의 디스크를 포맷하는 동안 오류가 발생하면 다음 예제는 오류 메시지를 표시합니다.

:begin @echo off format a: /s if not errorlevel 1 goto end echo An error occurred during formatting. :end echo End of batch program.

오류가 발생하지 않으면 오류 메시지가 나타나지 않습니다.