메뉴 건너뛰기


Developer > Operating System

MS-DOS IF 명령어

2014.08.27 01:09

푸우 조회 수:8938


IF 명령어

배치 파일에서 조건 처리를 수행합니다.

IF [NOT] ERRORLEVEL 숫자 명령어

IF [NOT] 문자열1==문자열2 명령어

IF [NOT] EXIST 파일이름 명령어


  NOT               조건이 거짓이면 명령을 수행하라고 지정합니다.

  ERRORLEVEL 숫자   마지막 프로그램 실행에서 반환된 마침 코드가 지정된 숫자보다 크거나 같으면, 조건을 참으로 지정합니다.

  문자열1==문자열2  지정된 문자열이 일치하면 조건을 참으로 지정합니다.

  EXIST 파일이름    지정된 파일이름이 있으면 조건을 참으로 지정합니다.

  명령어            조건이 만족되면 실행할 명령을 지정합니다.

                    지정된 조건이 FALSE인 경우에는 ELSE 키워드 다음에 명령을 수행하도록 ELSE 명령어를 지정합니다.




- 확장된 IF 구문


기본적인 IF문에 다음과 같은 확장된 문법을 사용할 수 있습니다.


IF [/I] 문자열1 비교연산자 문자열2 명령

    IF CMDEXTVERSION 숫자 명령

    IF DEFINED 변수 명령


사용할 수 있는 비교 연산자는 다음과 같습니다:


    EQU - 같음

    NEQ - 같지 않음

    LSS - 보다 작은

    LEQ - 작거나 같음

    GTR - 보다 큰

    GEQ - 크거나 같음



- IF 구문 구성 방법


명령어가 여러개여서 여러 라인으로 구성되어야 한다면 괄호()로 묶을 수 있습니다.


그런데 괄호를 아무곳이나 사용하면 안되구요. 열기 괄호는 IF문과 같은 라인에 있어야 합니다.

그래서 다음 구문은 올바른 구문이 아닙니다.


IF EXIST filename

(

echo filename existing.

)


다음은 올바른 구문입니다.


IF EXIST filename (

echo filename existing. 

)

이렇게 하면 IF ~ ( ~ ) 까지 해서 하나의 구문으로 만든 것입니다.


IF문에서의 ELSE를 사용하는 것은 좀 까다롭습니다.

IF문과 ELSE문이 한라인의 문장으로 인식되어야 정상적으로 동작합니다.

그렇다고 다음과 같이 작성하면 ELSE 구문을 구별해 내지 못합니다.

IF EXIST filename  echo filename existing. ELSE echo filename missing.


위 구문이 정상 동작하기 위해서는 최소한 다음과 같이 변경되어야 합니다.


IF EXIST filename  ( echo filename existing. ) ELSE echo filename missing.


괄호를 사용하면 줄바꿈을 할 수 있으므로 다음과 같이 사용도 가능합니다.


IF EXIST filename  ( 

    echo filename existing. 

) ELSE echo filename missing.


만약 ELSE 뒤의 명령어에도 괄호를 사용하고 싶다면 다음과 같이 사용하면 됩니다. 단, ELSE 뒤 괄호의 시작은 ELSE 구문과 같은 라인에 위치해야 합니다.


IF EXIST filename  ( 

    echo filename existing. 

) ELSE (

    echo filename missing.

)


복잡하죠? ㅠㅠ.  그냥 맘 편하게 바로 위와 같은 형태로 그냥 사용하는 걸로 하면 마음 편할 것 같습니다.


IF문을 큰 틀에서 어떻게 구성하는지 알아 봤으니 이제 부터는 비교구문의 각 케이스 별로 살펴 보겠습니다.


- 문자열 비교


문자열 비교 구문은 다음과 같이 다양한 방법으로 만들 수 있습니다.

다음 세가지 IF문은 동일하게 동작합니다.


IF 문자열1==문자열2 ( echo TRUE ) ELSE ( echo FALSE )

IF 문자열1 EQU 문자열2 ( echo TRUE ) ELSE ( echo FALSE )

IF NOT 문자열1 NEQ 문자열2 ( echo TRUE ) ELSE ( echo FALSE )



또한 다음 세가지 IF문도 동일하게 동작합니다.


IF NOT 문자열1==문자열2 ( echo TRUE ) ELSE ( echo FALSE )

IF 문자열1 NEQ 문자열2 ( echo TRUE ) ELSE ( echo FALSE )

IF NOT 문자열1 EQU 문자열2 ( echo TRUE ) ELSE ( echo FALSE )



문자열을 비교할때 대소문자를 구별하지 않으려면 IF문 다음에 /I 를 추가하면 됩니다.


IF /I STR==str ( echo TRUE ) ELSE ( echo FALSE )

IF /I STR EQU str ( echo TRUE ) ELSE ( echo FALSE )

IF /I NOT STR NEQ str ( echo TRUE ) ELSE ( echo FALSE )



문자열의 같고 다름 뿐만 아니라 문자열의 크고 작음도 다음과 같이 비교할 수 있습니다.


IF Apple LSS Banana ( echo Apple is low. ) ELSE ( echo Apple is high. )

IF Apple LEQ Banana ( echo Apple is low or equal. ) ELSE ( echo Apple is high. )

IF Dog GTR Cat ( echo Dog is high. ) ELSE ( echo Dog is low. )

IF Dog GTR Cat ( echo Dog is high or equal. ) ELSE ( echo Dog is low. )



- 숫자비교


비교하려는 문자열이 모두 숫자로만 구성된 경우 수로 변환하여 비교하게 됩니다.


IF STR5 LSS STR10  ( echo STR5 is low. ) ELSE ( echo STR5 is high. )


위의 경우는 문자열 비교로 STR5 is high로 출력됩니다.


IF 5 LSS 10  ( echo 5 is low. ) ELSE echo ( 5 is high. )


위의 경우는 숫자 비교로 5 is low로 출력됩니다.


ERRORLEVEL 비교


일반적인 DOS 프로그램은 종료될 때 숫자를 리턴합니다.  (이 값은 ERRORLEVEL이라는 동적 변수에 저장되므로 확인해 볼 수 있습니다.)

프로그램 수행 결과 정상인 경우 0을 아닌 경우 0 이외의 값을 리턴하는데 이 리턴 값을 비교하겠다는 것이 ERRORLEVEL 비교입니다.


DIR C:\

ECHO %ERRORLEVEL%


위의 명령어는 0을 출력합니다. C:\ 드라이브는 당연히 있어서 정상적으로 DIR명령이 수행 되었을 것이기 때문입니다.


DIR ABC:\

ECHO %ERRORLEVEL%


위의 명령어는 1을 출력합니다. ABC:\ 드라이브는 존재하지 않기 때문에 DIR명령이 정상 수행 되지 않았을 것이기 때문입니다.


IF ERRORLEVEL 문을 이용하면 이전 수행한 명령어가 정상 실행되었는지를 다음과 같이 판단할 수 있습니다.


DIR F:\

IF ERRORLEVEL 1 ( echo Error ) ELSE ( echo Success)


- 파일 존재 여부 판단


IF EXIST 구문을 통해 파일의 존재 여부를 확인 할 수 있습니다. 사실은 파일 뿐만 아니라 디렉토리가 존재하는지도 파악할 수 있습니다.

Hidden 속성을 가진 파일이나 디렉토리도 존재 여부가 똑같이 확인됩니다.


IF EXIST C:\Temp  ( echo It is Exist. ) ELSE ( echo It's not Exist. )



- 명령어 확장 버전 확인

OS에 따라 CMD 명령어가 조금씩 발전(확장)되어 왔고 각 변화때마다 숫자를 하나씩 증가하여 버전으로 사용하고 있습니다. 이를 명령어 확장 버전이라하고 CMDEXTVERSION 동적 환경 변수에 값을 가지고 있어 확인이 가능합니다.

제가 사용하는 WIndows 7의 CMDEXTVERSION이 2 이네요.

이런 명령어 확장 버전에 따라 Batch 파일 제어 하려면 다음과 같은 형태로 사용할 수 있습니다.


IF CMDEXTVERSION 0 ( echo You can use the cmd extension. ) ELSE ( echo You can't use the cmd extension. )


- 변수 정의 여부 확인

환경변수, 사용자변수, 동적환경변수 등 각각의 변수가 정의되어 있는지를 IF DEFINED 구문을 통해 확인 할 수 있습니다.


IF DEFINED MYVAR ( echo MYVAR 가 정의됨 ) ELSE ( echo MYVAR 가 정의 되지 않음 )

SET MYVAR=내변수

IF DEFINED MYVAR ( echo MYVAR 가 정의됨 ) ELSE ( echo MYVAR 가 정의 되지 않음 )

SET MYVAR=

IF DEFINED MYVAR ( echo MYVAR 가 정의됨 ) ELSE ( echo MYVAR 가 정의 되지 않음 )


위의 구문에 의해 다음과 같은 결과가 출력됩니다.


MYVAR 가 정의 되지 않음

MYVAR 가 정의됨

MYVAR 가 정의 되지 않음




크리에이티브 커먼즈 코리아 저작자표시 Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락/3.0에 따라 이용하실 수 있습니다