Friday, June 16, 2006
[배치파일 강좌] GOTO 명령 / 라벨(레이블; Label)에 대해서
GOTO 명령이란?
다른 언어에서도 마찬가지지만, 배치 파일에서의 goto 문도, 다른 곳으로 점프하라는 명령입니다.
GW-BASIC 의 GOTO 문에는 점프할 행번호를 지정해야 하지만
배치파일에서는 행번호를 붙이지 않기 때문에, 행번호 대신에 라벨을 지정합니다.
라벨(Label)이란?
GOTO 가 점프해 올 표지판을 세우는 것입니다.
어떤 문자열 앞에 콜론(:)을 하나 찍어 주면, GOTO 문의 행선지가 될 라벨을 만들 수 있습니다.
가령
:FOO
라고 하면 FOO 라는 이름의 라벨 즉 꼬리표가 생긴 것입니다. 대소문자는 구분하지 않습니다.
goto 소설
:소설
goto 똠방
:똠방
이렇게 한글도 되는 것 같은데, 되도록 영문자로 라벨을 지정하는 것이 안전합니다.
간단한 예제
파일명: example.bat
@echo off
goto QUIT
echo 이 문장은 결코 실행되지 않습니다.
:QUIT
echo 더 실행할 문장이 없기에, 여기서 종료됩니다.
goto QUIT
echo 이 문장은 결코 실행되지 않습니다.
:QUIT
echo 더 실행할 문장이 없기에, 여기서 종료됩니다.
배치파일은 위에서 아래로 실행됩니다. 그래서 "echo 이 문장은 결코 실행되지 않습니다." 라는 문장이 실행되어야 하지만, goto QUIT 이라는 것이 앞에 있기 때문에, 그냥 :QUIT 으로 점프해 버려서, "echo 더 실행할 문장이 없기에, 여기서 종료됩니다." 가 실행됩니다.
만약 위의 코드에서 :QUIT 을 지정해 주지 않았다면, "시스템이 지정된 일괄 레이블을 찾을 수 없습니다 - QUIT" 이런 에러가 납니다.
배치 파일로, 무한 루프 만들기
goto 문을 사용해, 위로 거슬러 올라가거나 할 수도 있습니다.
@echo off
:LOOP
echo 무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
goto LOOP
:LOOP
echo 무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
goto LOOP
goto LOOP 가 실행되는 순간, 다시 :LOOP 라벨로 거슬러 올라가게 되고, 이것이 영원히 반복됩니다.
위의 예제를 foo.bat 등의 이름으로 하드에 저장하고, 명령 프롬프트(일명 도스창)에서 실행하면 다음의 결과가 나옵니다:
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
... 중략 ...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
^C일괄 작업을 끝내시겠습니까 (Y/N)? y
D:\Z>
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
... 중략 ...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
무한 루프! Ctrl+C를 누르면 강제로 종료됩니다...
^C일괄 작업을 끝내시겠습니까 (Y/N)? y
D:\Z>
Ctrl+C 키, 즉 Ctrl 키를 누르면서 C 키를 눌러야 종료됩니다. 만약 Ctrl+C 키가 작동하지 않으면 Ctrl+Break 키를 눌러 봅니다.
tag: batch
배치파일 | DOS CMD BATCH .BAT | VBScript .VBS
Thanks for the help. I appreciate it!
Thanks for visiting my blog..
(^_^)
<< Home