배치 파일 명령어

배치 프로그램이란 MS-DOS에서 실행 가능한 명령어를 순차적으로 처리하기 위하여 MS-DOS 명령어를 모아놓은 아스키 파일로, 일반적으로 BAT 확장명을 갖는다. 배치 프로그램은 흔히 배치 파일이라고도 한다.

배치 파일에서 사용할 수 있는 명령어는 MS-DOS에서 사용할 수 있는 모든 내부 외부 명령어, 배치 파일 전용 명령어로 구분된다. 배치 파일 전용 명령어란 프롬프트 상에서는 사용할 수 없고 배치 파일에서만 사용할 수 있는 명령어를 의미한다. 배치 파일에서는 BREAK, REM, SET 등 프롬프트 혹은 CONFIG.SYS 파일에서도 사용할 수 있는 공용 명령어와 2개의 특수 문자(@, ;)를 사용할 수 있다.

다음은 MS-DOS에서 사용되는 배치 프로그램 전용 명령어이다.

Call Choice Echo

For Goto If

Pause Rem Shift

SET 명령어는 프롬프트 상에서도 사용할 수 있는 명령어지만 주로 배치 프로그램에서 많이 사용되기 때문에 "프롬프트 명령어"에 포함하지 않고, 배치 파일 명령어에서 설명하기로 한다. 또한, REM 명령어도 CONFIG.SYS에서도 사용할 수 있는 명령어이지만 배치 파일 명령어에서 설명하기로 한다.

CALL

배치 프로그램에서는 COM이나 EXE 확장자를 가진 실행 파일은 해당 파일 이름을 입력함으로써 실행시킬 수 있다. 그러나 배치 프로그램은 이러한 방법을 사용하여 실행할 수 없다. 따라서 MS-DOS에서는 배치 프로그램을 실행하는 도중에 다른 배치 프로그램을 실행하기 위한 특별한 명령어를 준비하고 있다. 배치 프로그램에서 다른 배치 프로그램을 호출하기 위하여 사용되는 명령어는 CALL로써, 해당 배치 프로그램을 종료하지 않고 다른 배치 프로그램을 실행하기 위하여 사용한다.

배치 프로그램 안에서 다른 배치 프로그램을 호출할 경우에는 반드시 BAT 확장자를 생략하여야 한다. 즉, 배치 프로그램 안에서 실행 파일을 실행하기 위해서는 실행 프로그램의 이름만 입력하거나 확장자를 포함할 수 있었지만 배치 프로그램에서는 반드시 호출할 배치 프로그램의 파일 이름만 지정하여야 하는 것이다.

■ 사용법

CALL [[drive:][path]] filename [batch-para]

■ 옵션 및 매개변수

[drive:][path] filename 실행할 배치 파일의 경로와 이름을 지정한다. CALL 명령어를 사용하여 실행할 배치 파일은 반드시 BAT 확장자를 갖는 파일이어야 한다.

batch-para 배치 파일을 실행하기 위한 모든 변수를 지정한다. 지정할 수 있는 변수는 매개변수와 옵션을 포함한다.

■ 사용상 주의

☞ batch-para 사용하기

batch-para는 배치 파일에 전달할 수 있는 모든 정보를 포함할 수 있는데, 여기에는 옵션과 파일명, 그리고 %1∼%9까지의 변경할 수 있는 매개변수와 %band%와 같은 변수가 포함된다.

☞ 파이프(|)와 방향 전환 기호(>)의 사용

CALL 명령어에서는 파이프(pipes: |)와 방향 전환을 위한 방향 전환 기호(redirection symbols:>, <, >>, <<)를 사용할 수 없다.

☞ 반복적인 CALL 만들기

CALL 명령어를 사용하여 자신의 배치 파일을 호출함으로써 반복적인 배치 파일을 만들 수 있다. 이 경우처럼 반복적인 배치 파일을 만드는 경우에는 반드시 해당 배치 파일을 끝낼 수 있도록 설계되어야만 한다. 그렇지 않으면 무한 루프로 되어 해당 배치 파일을 영원히 끝나지 않게 된다.

■ 사용 예

HWPCHECK.BAT 파일을 다른 배치 파일에서 실행시키고자 한다면, 해당 배치 파일에 다음을 포함시킨다.

call hwpcheck

위의 예에서 현재 실행 중인 배치 프로그램에서 2개의 매개변수를 받은 다음 이를 실행할 배치 프로그램에 전달하고자 한다면 다음과 같이 뒤에 매개변수를 할당한다.

call hwpcheck %1 %2

CHOICE

이 명령어는 GOTO 명령어를 사용하여 다중 분기문을 작성하기 위하여 사용하는 것으로, 일반적으로 다중 배치 프로그램을 작성하기 위하여 사용되는 배치 프로그램 명령어이다.

이 명령어는 배치 프로그램에서 사용자가 지정한 프롬프트 상태를 유지하고 있다가 지정된 시간이 경과되거나 지정된 문자를 지정하면 다음 명령어를 실행한다. 이 경우 CHOICE 명령어는 에러 수준 종료코드를 운영 체제에 돌려주는데, 종료 코드와 GOTO 명령어를 이용하여 작업을 세분할 수 있다.

■ 사용법

CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]

■ 옵션 및 매개변수

text 사용자가 선택하도록 기다리는 프롬프트 앞에 출력하고자 하는 문자열을 지정한다. 만약, 프롬프트 앞에 디스플레이될 문자열의 일부로 옵션 부호(/)를 사용하려면 따옴표를 사용해야 한다. 문자열을 지정하지 않는 경우에는 선택할 프롬프트만 디스플레이한다.

/c[:]choices 프롬프트로 선택할 수 있는 문자를 지정한다. 다수의 문자를 지정하는 경우에는 콤마(.)를 분리 문자로 사용하며, 지정한 문자는 괄호안에 나타나고 물음표 다음에 디스플레이된다. /c 옵션을 지정하지 않는 경우 YN을 디폴트 값으로 사용한다. 콜론(:)은 선택적으로 생략할 수 있다.

/n 사용자가 항목을 선택하도록 대기하는 프롬프트가 디스플레이되지 않도록 지정하기 위하여 사용한다. 그러나 프롬프트 앞의 문자열은 디스플레이된다. 만약, /n 옵션을 지정하지 않으면 CHOICE 명령어 라인에 지정한 선택 문자는 유효하다.

/s 대 소문자를 구분하여 받아들이도록 지정하기 위하여 사용하는 옵션이다. 만약, /s 옵션을 지정하지 않으면 사용자가 지정한 선택 문자의 대 소문자를 구분하지 않고 모두 받아 들인다.

/t[:]c,nn 사용자가 선택 문자를 지정하지 않을 때 디폴트로 선택될 문자와 기다리는 시간을 지정한다.

c 사용자가 선택 문자를 지정하지 않을 때 디폴트로 선택될 문자를 지정하고, 이 문자는 /c 옵션에서 지정한 선택 문자 안에 있는 것이어야 한다.

nn c 값을 디폴트로 선택하기 전에 대기할 프롬프트 시간을 지정한다. 지정할 수 있는 값의 유효 범위는 0∼99 값의 범위에서 초 단위로 지정한다. 만약, 0초를 지정하면 항상 디폴트 값이 사용된다.

■ 사용상의 주의

☞ 작업을 분할하기

CHOICE 명령어는 작업을 분할하기 위하여 사용한다. 즉, CONFIG.SYS 에서는 다중 부트 분할을 만들어 사용자가 원하는 시스템 구성으로 컴퓨터를 시작할 수 있다. AUTOEXEC.BAT에서는 이 명령어를 사용하여 다중 환경으로 구성할 수 있다.

CHOICE 명령어를 사용한 다중 부트 분할에 대해서는 다음에 설명할 "사용 예"를 참조하기 바란다.

☞ CHOICE의 메시지

다음은 배치 프로그램에서 CHOICE 명령어를 사용하는 방법과 그에 따른 메시지를 나타낸다.

CHOICE 명령어에 선택 문자만을 지정한 경우

명령어 줄 choice /c:ync

메시지 [Y,N,C]?

CHOICE 명령어에 선택 문자와 문자열을 지정한 경우

명령어 줄 choice /c:ync Yes, No, or Continue

메시지 Yes, No, or Continue [Y,N,C]?

CHOICE 명령어에 프롬프트를 생략하는 /n 옵션을 사용한 경우

명령어 줄 choice /n Yes, No, or Continue?

메시지 Yes, No, or Continue?

CHOICE 명령어에 /t 옵션을 사용한 경우

명령어 줄 choice /c:ync /t:y,5

메시지 [Y,N,C]?

위 의 예에서 만약 5초 이내에 선택 문자 중에서 아무키라도 누르지 않으면 CHOICE는 자동으로 Y를 선택하고 종료 코드 값으로 1을 운영 체제에 넘겨준다. 5초 이내에 선택 문자를 누르면 CHOICE는 선택한 값에 대응되는 종료 코드를 넘겨준다.

☞ 종료 코드

CHOICE 명령어는 실행을 종료한 뒤 에러 수준 종료 코드를 운영 체제에 돌려주는데, 사용자는 종료 코드를 이용하여 다중 분기문을 작성할 수 있다.

다음은 CHOICE가 운영 체제에 돌려주는 종료 코드에 관한 설명이다.

0 배치 프로그램을 중단하기 위하여 키보드 상에서 <Ctrl>+<BREAK> 혹은 <Ctrl>+<C>를 눌렀다.

1 사용자가 첫번째 선택 문자를 선택하였다.

2 사용자가 두번째 선택 문자를 선택하였다.

3 사용자가 세번째 선택 문자를 선택하였다.

. .

. .

255 에러가 발생하였다.

종료 코드를 이용하는 방법에 관한 자세한 사항은 IF 명령어를 참조하거나, 다음에 설명할 "사용 예"를 참조하기 바란다.

■ 사용 예

컴퓨터를 켤 때 사용자가 원하는 경우에 C드라이브에 있는 파일들의 단편화를 제거하는 프로그램인 DEFRAG를 실행하도록 설정하려면 AUTOEXEC.BAT 파일에 다음과 같은 내용을 추가한다. 만약, 다른 명령어를 지정하여 사용하고자 한다면 DEFRAG 대신에 원하는 명령어를 지정한다.

choice Defrag drive /t:n,5

if errorlevel 255 goto error

if errorlevel 2 goto SkipDefrag

defrag c: /f/se/b

:error

echo Error Found!

pause

:SkipDefrag

만약 5초 이내에 Y를 누르면 단편화 제거 프로그램이 실행되고 CHOICE는 1의 값을 종료 코드 값으로 운영 체제에 돌려준다. 5초 이내에 Y키를 누르지 않거나 N키를 누르면 C 드라이브의 단편화 제거 프로그램은 실행되지 않는다. 만약, 단편화 제거 프로그램이 실행된다면 /b 옵션을 사용하였기 때문에 프로그램이 종료됨과 동시에 컴퓨터를 재시동하게 된다.

다음의 배치 프로그램의 예는 CHOICE 명령어를 이용하여 HWP, Windows, MS-DOS 에디터, MS-DOS의 백업 프로그램 중에서 하나를 선택하는 방법을 보여준다. 단, 위의 모든 실행 프로그램은 하드디스크에 설치되어 있고, PATH 명령어에 경로가 추가되어 있다고 가정한다.

@echo off

cls

echo 1 HWP

echo 2 Windows

echo 3 MS-DOS Editor

echo 4 Backup

choice /c:1234

if errorlevel 255 goto Exit

if errorlevel 4 goto Backup

if errorlevel 3 goto Edit

if errorlevel 2 goto Win

if errorlevel 1 goto Hwp

:Backup

c:\dos\msbackup

goto Exit

:Edit

edit

goto Exit

:Win

c:\windows\win

goto Exit

:Hwp

c:\hwp21\hwp

:Exit

ECHO

이 명령어는 배치 프로그램에서 필요한 메시지를 디스플레이하기 위하여 사용한다. 즉, 배치 프로그램에서 작업 중 텍스트로 이루어진 메시지를 스크린에 디스플레이하는데 사용된다. 이 외에도 배치 프로그램에 지정되어 있는 명령어의 반향을 켜거나 끄도록 설정하기 위하여 사용한다. 예를 들어, 다수의 명령어 행을 포함하고 있는 경우에는 명령어 반향을 끄기 위하여 배치 프로그램의 첫 행에 "echo off"를 추가한다.

■ 사용법

ECHO [ON|OFF]

ECHO [message]

■ 옵션 및 매개변수

on|off 명령어 반향의 특징을 켤 것인지 아니면 끌 것인지를 결정한다. 현재의 ECHO 설정을 디스플레이하기 위해서는, 매개변수 없이 사용한다.

message 배치 프로그램을 실행할 때 화면에 디스플레이될 문자열을 타이프한다.

■ 사용상의 주의

☞ ECHO 명령어에 메시지 사용하기

ECHO 명령어는 ECHO가 OFF로 설정되어 있는 경우에 매우 유용하다. 즉, 다른 명령어를 디스플레이하지 않고 몇 줄의 메시지를 디스플레이하기 위하여 배치 프로그램에서 ECHO OFF 명령어를 사용한 다음, 필요한 메시지를 연속적으로 ECHO 명령어 뒤에 기록한다.

☞ 명령어 감추기

다수의 명령어를 포함하는 배치 프로그램인 경우 ECHO OFF 명령어를 사용하여 배치 프로그램에 포함되어 있는 명령어가 화면에 나타나지 않는다. 만약, 배치 파일에 포함된 프롬프트를 디스플레이하려면 ECHO ON 명령어를 사용한다.

☞ 한 줄의 명령어 라인만 감추기

ECHO OFF 명령어를 사용할 경우에는 다음에 ECHO ON 명령어가 나타날 때 까지 배치 프로그램 안에서는 계속 유효하다. 그러나, ECHO OFF 명령어는 프롬프트 상에 반향되어 나타난다. 만약, ECHO OFF 명령어 자체를 반향하지 않도록 하려면 at 기호(@)를 사용하여야 한다. 즉, 배치 프로그램의 맨 위에 "@ECHO OFF"라고 입력하면 프롬프트 상에 ECHO OFF라는 명령어도 디스플레이되지 않는다.

☞ @와 콜론(:), 세미콜론(;), REM 명령어와의 비교

한 줄의 명령어 라인을 실행하지 않기 위해서는 콜론(:)과 세미콜론(;), REM 명령어를 사용한다. 이 명령어나 기호는 CONFIG.SYS와 배치 프로그램에서만 사용하는 명령어로써 콜론(:)은 해당 명령어 라인을 GOTO 명령어에 의해 찾아갈 레이블로 인식하기 때문에 명령어를 실행하지 않고, 세미콜론(;)과 REM 명령어는 MS-DOS에서 주석문을 달기 위하여 사용되는 명령어이기 때문에 세미콜론이나 REM이 명령어 라인의 맨 앞에 오면 해당 명령어 라인은 MS-DOS가 실행하지 않는다.

따라서, @는 명령어를 실행하되 명령어를 프롬프트 상으로 반향하지 않는다는 것이고, 콜론, 세미콜론, REM 명령어는 명령어의 반향과는 무관하고 단지 명령어행으로 인식하지 않는다는 차이가 있을 뿐이다.

☞ 빈 줄을 디스플레이하도록 하기

스크린에 빈줄을 디스플레이하려면 ECHO 명령어 다음에 마침표(.)를 입력한다. 만약 ECHO와 마침표 사이에 스페이스가 있는 경우에는 화면에 마침표(.)를 디스플레이하므로, 빈줄을 디스플레이하려면 둘 사이에 스페이스를 두지 않아야 한다.

☞ 파이프와 방향 전환 기호의 디스플레이

사용자는 ECHO 명령어를 사용하여 파이프(|)나 입출력 방향 전환 기호(< 혹은 >)를 디스플레이할 수 없다.

■ 사용 예

다음의 예는 선행하는 세 줄의 메시지를 포함하고, 빈줄이 뒤따르는 배치 프로그램의 일부이다.

echo off

echo.

echo This is batch program

echo formats and checks

echo new disks

echo.

.

.

위의 예에서 ECHO를 끄고, ECHO 명령어를 반향하지 않도록 하려면 다음과 같이 명령어 앞에 at 기호(@)를 포함한다.

@echo off

사용자는 배치 프로그램을 작성할 때 IF 명령어를 ECHO 명령어와 함께 사용할 수 있다. 다음의 예는 명령어 라인 상에 IF와 ECHO 명령어를 사용한 예이다.

if exist *.rpt echo the report has arrived.

FOR

사용자가 지정한 일련의 파일에 지정된 명령어를 실행하기 위하여 사용하는 명령어이다. 사용자는 FOR 명령어를 배치 프로그램에 사용할 수 있고, 직접 프롬프트 상에서 사용할 수 있는데, 일반적으로 배치 프로그램에서 많이 사용되므로 FOR 명령어를 배치 프로그램 명령어로 분류하기도 한다.

■ 사용법

배치 프로그램에서의 FOR 명령어 사용 방법

FOR %%variable IN (set) DO command [command-para]

명령어 프롬프트에서의 FOR 명령어 사용 방법

FOR %variable IN (set) DO command [command-para]

■ 옵션 및 매개변수