본문 바로가기

old drawer/programming

[배치파일] 2강 일반 제어문

고급 배치파일 제 002강 : 일반 제어문

지난 001강에서는 배치파일 기초 문법과 입력문에 대해 알아보았습니다.

이번 시강에서는 제어문에 대해서 알아봅시다.

◆ goto문
goto문이란, 그 레이블로 뛰어 넘어 가라는 말로 거꾸로도 올라가게도 할 수 있습니다.

[코드]
goto 레이블

[코드]

:레이블
[코드]

 

:레이블 : goto문에서 사용할 레이블을 정의합니다. (앞에 콜론 주의하세요. 세미콜론(;) 아닙니다.)

goto 레이블 : 정의한 레이블로 넘어갑니다.

※위로 올라가는 goto문은 뛰어넘은 후 또 다시 goto문에 의해 계속 올라가기 때문에 조건 없이 한다면 무한반복이 발생되므로 주의하시기 바랍니다.

※레이블 이름은 exit, dir 등등 예약어도 쓰실 수 있으며, 한글, 숫자 다 됩니다. 특수문자는 가급적 삼가해 주시기 바랍니다. 또한 레이블 이름은 대/소문자 구분을 하지 않습니다. 그리고 중복된 레이블 이름은 정의를 하실 수 없습니다.

◆ 일반 if문

C언어에서의 if와 똑같이 if문을 쓰면 되는데, goto문과 함께 쓰시면 됩니다.


원래 절차지향프로그래밍에서는 goto문을 쓰지 않고 {, }로 블럭을 싸지만 배치파일에서는 대신에 goto문을 쓰는 것이 일반적입니다. 배치파일에서도 (, )를 쓰실 수는 있으나 약간 버그가 있으므로 여기에서는 goto문을 사용합니다.

if [/i] [not] "조건A"=="조건B" goto 레이블1
   [위의 조건이 거짓일 때의 실행 코드]
goto 레이블2
:레이블1
   [위의 조건이 참일 때의 실행 코드]
:레이블2


조건A, B : 두 값을 서로 비교하기 위한 변수나 상수 ( %변수% 또는 값 )

/i : 대/소문자를 구분하지 않고 비교 (예를들어 aa과 Aa는 같은것임, 생략시 대/소문자 구분)
not : 조건 A와 B가 서로 다를때 참이됨 (not을 생략하면 갈을때 참임)
레이블1 : 조건이 거짓일 때 뛰어가는 레이블
레이블2 : 거짓일 때 실행 후에 if문 블록에서 벗어나 참일 때 실행이 안되게 하도록 뛰어가는 레이블 (C언어의 switch에서 break와 비슷한 기능)


★ 주의하세요 ==> if문을 여러 번 필요 할 때는 각각의 레이블을 따로 지정 하세요.

위 코드는 조건이 참이다면 아래 코드를 실행하며,
조건이 거짓이다면 위의 코드를 실행하게 됩니다.

아래 예시를 자신의 타이핑으로 직접 쳐 보시기 바랍니다.

파일 명 : 2-1.bat

@echo off
echo ==============================
echo 배치파일 예제 2-1 - 변수==상수
echo ==============================
echo.
set /p a=사과를 영어로? (소문자로 쓰세요) :

if "%a%"=="apple" goto CORRECT
echo 틀리셨군요 정답은 apple입니다.
goto EXIT
:CORRECT
echo 짝짝짝 정답입니다~~~!!
:EXIT

pause>nul

 


파일 명 : 2-2.bat

@echo off
echo ==============================
echo 배치파일 예제 2-2 - 변수==변수
echo ==============================
echo.
set /p a=입력 1 :
set /p b=입력 2 :

if "%a%"=="%b%" goto true
echo %a%와 %b%는 서로 다릅니다.
goto exit
:true
echo %a%와 %b%는 서로 같습니다.
:exit

 

if /i "%a%"=="%b%" goto true2
echo %a%와 %b%는 대소문자를 구분안하고도 서로 다릅니다.
goto exit2
:true2
echo %a%와 %b%는 대소문자를 구분안했으므로 서로 같습니다.
:exit2


pause>nul

 

◆ 다중 if문

C언어에서와도 마찬가지로 배치파일도 여러 조건별로 해당 코드를 실행을 하게 할수 있습니다.

if [/i] [not] "조건A"=="조건B" goto 레이블1
if [/i] [not] "조건A"=="조건B" goto 레이블2
if [/i] [not] "조건A"=="조건B" goto 레이블3
....
if [/i] [not] "조건A"=="조건B" goto 레이블n
   [n가지 조건 모두 전부 거짓일 때의 실행 코드]
goto 종료레이블
:레이블1
   [첫번째 조건이 참일 때 실행 코드]
goto 종료레이블
:레이블2
   [두번째 조건이 참일 때 실행 코드]
goto 종료레이블
:레이블3
   [세번째 조건이 참일 때 실행 코드]
goto 종료레이블
....
:레이블n
   [n번째 조건이 참일 때 실행 코드]
:종료레이블

다중 if문 역시 각각의 조건에서 A와 B가 같으면(다르면) 해당 레이블로 이동 하며, 모두 거짓이면 조건 뒤의 코드를 실행하게 됩니다.


역시 예제를 통하여 활용해 봅시다.


파일 명 : 2-3.bat

@echo off
echo ==============================
echo 배치파일 예제 2-3 - 다중if문
echo ==============================
echo.
set /p fruit=사과, 딸기, 수박 중 아무거나 입력하세요:
if "%fruit%"=="사과" goto apple
if "%fruit%"=="딸기" goto straw
if "%fruit%"=="수박" goto water
echo 잘못입력하셨습니다. 프로그램이 종료됩니다....
goto exit

:apple
echo Apple
goto exit

:straw
echo Strawberry
goto exit

:water
echo Watermelon
goto exit

:exit

pause>nul

 

 

이번강에서는 그 문자열이 상등(상이) 하다는 것만 배웠습니다. 크다, 작다 등 대/소 비교를 위해서는 수치 처리가 필요 합니다.

다음장에서는 003강 : [수치 처리와 입력]에 대해서 알아봅시다.