들어가며
IF 명령 확장은 IF 명령이 가진 기능을 추가하고 넓힌다는 뜻으로, IF 명령으로 여러 가지 다른 처리를 할 수 있도록 해 준다. 앞서 나온 IF 문자열에서도 일부 소개하였지만, 윈도XP의 IF 명령은 상당히 뛰어난 기능을 제공하고 있다. 대부분 IF 문자열 기능에 포함되어 있고, 여기에서는 IF 문자열에서 설명하지 않은 부분만을 설명하겠다.
말뜻
IF 명령 확장에는 세 문자로 이루어진 비교 연산자(연산자 확장)와 IF CmdExtVersion 구문 및 IF Defined 구문이 있다.
- 세 문자로 이루어진 비교 연산자는 IF 문자열을 참조하세요.
- IF CmdExtVersion 수 : 윈도XP의 도움말 및 지원 센터의 설명에 따르면, Cmd.exe의 명령 확장 기능과 관련된 내부 버전 번호가 '수'보다 크거나 같은 경우에만 참인 조건을 지정합니다. 첫째 버전은 '1'이며 의미있는 향상을 명령 확장에 추가할 때 하나씩 증가합니다. 명령 확장을 사용할 수 없게 설정하면 CmdExtVersion 조건은 항상 거짓입니다. 명령 확장이 사용 가능한지를 검사할 때도 사용할 수 있습니다. CmdExtVersion의 정확한 값을 알고 싶다면 명령행에서도 "echo %CmdExtVersion%"라고 입력해 보라.
- IF Defined 환경변수 : 지정한 환경변수가 정의되어 있으면 참값을, 그렇지 않으면 거짓값을 돌려준다.
IF CmdExtVersion 구문
명령확장을 사용할 수 있는지를 사용할 수 있다. 또한 명령확장의 버전을 검사하여 배치파일 실행 여부를 판단할 때도 쓸 수 있다.
- if CmdExtVersion 2 (
- echo 윈도XP에서 명령확장을 사용할 수 있습니다.
- ) else echo 윈도XP가 아니거나 명령확장을 사용할 수 없습니다.
위와 같은 형식이 가장 기본적이다. echo 문은 예시일 뿐이니, 저 부분에 자신이 실행하기를 바라는 명령을 넣으면 된다.
또한 단순히 명령확장을 사용할 수 있는지를 알려면 다음과 같이 하면 된다.
- if CmdExtVersion 0 (
- echo 명령확장을 사용할 수 있습니다.
- ) else echo 윈도NT 계열이 아니거나 명령확장을 사용할 수 없습니다.
명령확장을 사용할 수 있다면 "if CmdExtVersion 0"은 무조건 참이 되어야 하므로 위의 예제는 명령확장을 사용할 수 있는지를 검증해 주는 코드가 된다.
IF Defined 구문
IF Defined 구문은 IF 문자열 구문의 확장으로 볼 수 있다.
- if not * == %var%* echo Variable %var% is defined.
- if not * == %var%* echo 환경변수 %var%이(가) 정의되어 있습니다.
위 두 문장은 출력문만 다를 뿐 완전히 같다. 환경변수가 정의되어 있다면 항상 문자열 값을 가지게 되므로 위의 구문에서 참값을 가지게 된다. 결국 "환경변수 %var%이(가) 정의되어 있습니다."라고 출력한다는 뜻이다. 이때 *(별표) 대신 다른 문자를 사용해도 결과는 같으나, %, ^, & 등은 사용하지 않는 것이 좋다. 특히 %와 ^는 배치파일에서 특별한 작용을 하므로 if문에 사용했을 경우 그 효과를 정확히 알고 사용해야 한다.
위의 예제를 Defined 를 이용하여 고치면 다음과 같다.
- if Defined %var% echo Variable %var% is defined.
- if Defined %var% echo 환경변수 %var%이(가) 정의되어 있습니다.
if Defined 환경변수 구문을 이용하게 되면 세 환경변수―%errorlevel%, %cmdcmdline% 및 %cmdextversion%―를 사용할 수 있게 됩니다. %errorlevel% 환경변수는 마지막으로 실행한 프로그램이 돌려주는 종료코드를 저장하고, %cmdcmdline% 환경변수는 마지막으로 실행한 명령줄을 저장합니다. 그리고 %cmdextversion% 환경변수는 앞서 설명했듯이 명령확장의 버전을 저장하고 있습니다.
과제
지난 번 과제는 다음 구문을 옳게 고치라는 문제였습니다.
- rem Compare.cmd
- IF /i NOT %1 EQU %2 ECHO %1 is equal %2 ELSE ECHO %1 is not equal %2 .
아래와 같이 하면 된다. 빨간 색 부분을 유심히 살펴보기 바란다.
- rem Compare.cmd
- IF /i %1 EQU %2 ( ECHO %1 is equal %2 ) ELSE ECHO %1 is not equal %2 .
다음 예고
GOTO문을 설명하기에 앞서 잠시 쉬어가는(?) 시간을 갖도록 하자. 다음에는 환경변수에 대해서 알아보겠다.
이 글은 스프링노트에서 작성되었습니다.