배치파일 기본 명령어 / 문법

돌아다니면서 구한 자료로 공부하는 공간입니다..

틀린부분이 있다면 말씀해주시면 수정하도록 하겠습니다.

※ 남을 비방하거나 욕 / 정치적인 글은 삭제 대상이 됩니다. ※

배치파일 기본 명령어 / 문법

배치 파일과 도스 명령어

도스 상태에서 지원되는 기본적인 배치 명령어들에 대해서 살펴보도록 하자. 이들 기본 명령어만 잘익히고 활용해도 좀 더 편리한 환경을 만들 수 있을 것이다. 또한 이는 작업을 빠르게 하는 방법을 찾을 수 있는 최초의 길이 될 것이다.
 
도스의 배치 파일에서 주로 사용되는 명령들은 모두 합쳐 수십 개 이상이지만 주로 사용되는 명령들에 대해 살펴보는 것만으로 다른 명령에 대한 이 해를 높일 수 있다. 명령들은 단지 집을 짓는 도구에 지나지 않는다.각각의 도구를 잘 이용하여 훌륭한 집을 짓기 위해서는 모든 도구를 잘 갈아야 하며, 부러지지 않도록 튼튼하게 손을 봐야 할 것이다. 배치 프로그래밍도 마찬가지다. 하나씩 정확한 개념을 이해함으로써 커다란 집을 지어 나갈 수 있을 것이다. 자! 그럼 같이 집을 지어 봅시다.
 
2.1 핵심 배치 파일 명령어들
도스의 배치 파일에서 사용되는 명령어는 도스 프롬프트에서 실행 가능한
모든 명령어들이 포함된다. 그러나 배치 파일에서만 전용으로 사용되는 명
령어들이 따로 존재하는데, 이러한 명령들의 형식과 사용법을 익혀 두는 게
배치 파일에 접근하기 위한 가장 우선적인 방법이다.
그럼 먼저 주요 배치 명령의 형식과 기능에 대해 설명하고 예를 들어 살
펴보자.
 
2.1.1 ECHO
ECHO는 배치 파일 안에 있는 명령이 실행될 때 명령어의 이름을 보여주
거나 감추어 주는 기능을 한다. 즉 명령 반항(ECHO) 상태를 설정하거나 취
소하기 위해 사용되는 명령이다. 마치 토글(TOGGLE)키처럼 동작하기 때문
에 처리 과정을 화면에 표시 여부를 쉽게 조정하게 된다.
* 형식 : ECHO ON or ECHO OFF

배치 파일에서 ECHO OFF로 지정되었을 때에는 명령어 이름을 보여주지
않고 실행함으로써 사용자가 혼동될 가능성이 있는 반면 화면이 지저분하지
않게 해준다. ECHO의 기본값은 ECHO ON으로 설정되어 있다. 따라서 도스
는 배치 파일이 실행이 끝나면 다시 ECHO ON으로 리셋(RESET)시키게 되
는데, 도스 3.3 이후부터는 ECHO OFF 자체도 앞에 @ 표시와 함께 써 줌으
로써 ECHO OFF가 화면에 표시되는 것을 막을 수 있게 되었다.


2.1.2 REM
배치 파일 내의 실행중인 명령과 기능 등을 사용자가 이해하기 쉽도록 주
석을 달 수 있게 해준다.
* 형식 : REM [설명문]

이 주석은 배치 파일이 길어진다던가 복잡해질 경우 프로그램의 이해를
높이기 위해 달아 주는 것이 좋다. 프로그래밍을 해보신 분들은 아시겠지만
소스를 보기 위해 얼마나 눈이 아프게 왔다갔다하십니까? 프로그램 분석시
이해하기 쉽게 하기 위해서 다음과 같이 한 줄 정도를 중간 중간에 띄어쓰
는 것도 좋은 방법이다. 이때 아무 기능을 하지 않는 빈줄 삽입을 위해 REM을 사용할 수 있다.
일반적으로 REM 명령은 배치 파일 작성자와 작성 날짜, 사용 목적 등을
기술하는데 사용하게 되며, 동작 과정을 이해하기 쉽게 주석을 이용하여 보
조 설명을 달거나 옵션과 도움말 설명을 위해 사용하기도 한다.
또 이 REM 명령이 사용되는 경우는 배치 파일 내의 명령어 중에서 일시
적으로 실행을 중시하려는 명령이 있을 때 사용되기도 한다. 즉 이 명령을
명령어 앞에 적어 두면 도스가 주석문으로 인식하기 때문에 실행이 되지 않
는다. 그리고 작성된 배치 파일이 원하는 대로 실행되지 않는다면, 명령어
앞에 REM을 추가하여 해당 명령어를 실행시키지 않은 상태로 만들어 놓고
문제가 발생한 행을 찾아낼 수 있다.
ECHO OFF
REM NAME REM_TEST.BAT
REM FUNCTION: REM 명령의 사용 예를 보여주기 위한 배치 파일이다.
REM 아래 rem 명령의 3가지 사용 예를 보여주었다.
REM (기능 1) 설명을 위해 사용한다.
REM 이렇게 설명을 달 수 있다.
REM (기능 2) 분석시 기독성을 위해 빈줄을 위해 삽입할 때 사용할 수 있다.
REM
REM (기능 3) 실행 명령어의 중지를 위해 사용한다.
REM CHKDSK
<예제 2-1> REM 명령을 이용한 배치 파일
2.1.3 PAUSE
처리중인 배치 파일을 멈추고 사용자에게 조건적인 메시지를 보여준다.
사용자가 어떤 키를 눌렀을 때 계속해서 처리된다. 이 명령은 배치 파일을
일시 중단시키는 기능을 하는데 지나가 버리는 화면을 사용자가 읽기 편하
게 잡아 놓기 위해 사용되거나 다른 준비 작업을 위해 약간의 여유를 주기
위해 이용된다.
* 형식 : PAUSE [message]

배치 파일 실행중에 PAUSE 명령을 만나게 되면, 도스는 "Press any key
to continue ..."와 같은 메시지를 화면에 보여준다. 또한 이 PAUSE 명령은
배치 작업 계속 실행 여부를 판단하기 위해 적합하다. 즉 배치 파일의 연속
적인 실행 과정 내에 이 PAUSE 명령을 삽입해 둠으로써 CTRL+C를 이용한
실행 중단을 쉽게 할 수 있다.
@echo off
echo please put a new disk into drive B
pause
copy a:*.* b:
<예제 2-2> PAUSE 명령을 이용한 배치 파일


위의 예제는 A 드라이브의 모든 파일을 B 드라이브로 복사하기 전에 디
스켓을 B 드라이브에 집어넣으라는 대기 시간을 제공하기 위해 PAUSE 명
령을 사용하였다. 이처럼 준비 작업을 위한 시간을 주기 위해서나 아니면
사용자의 판단을 돕기 위해 사용된다.
2.1.4 IF
배치 파일의 조건적인 처리를 수행하도록 하는 명령어이다. IF 문에 투입
된 내용의 값이 조건을 만족하는 '참'(TRUE)이면, IF 문 다음의 문장을 수행
한다. 그러나 조건의 값이 거직(FALSE)이면 뒤따라오는 문장의 명령을 무시
하고 넘어간다. 일반적인 IF문의 종류로는 6가지의 독특한 조건이 허용된다.
1) IF EXIT filename.ext(or parameter) Command
2) IF NOT EXIT filename.ext(or parameter) Cmmand
3) IF String1== String2 Command
4) IF NOT String1==String2 Command
5) IF ERRORLEVEL value Command
6) IF NOT ERRORLEVEL value Command
여기서 잠시 도스 배치 파일에서 사용되는 파라메터(변수)에 대해 알아보
자. 도스 배치에서 사용되는 파라메터(변수)는 %0 %1 %2 %3 %4 %5 %6
%7 %8 %9와 같은 10개가 있다. 그리고 프롬프트 상태에서 맨 앞에 오게
되는 도스 명령어는 대개 변수 %0에 배당된다.

C:>COPY PARA1.TXT PARA2.TXT
│ │ │
%0 %1 %2

♣ IF EXIST 형식
IF EXIST는 IF 문에서 가장 간단한 형식이다. 조건에 해당하는 파일이나 변
수에 입력된 값이 존재하면 뒤에 따라오는 명령을 수행한다. 즉, 조건의 값이
참이면 다음 문장을 수행하는 구조이다. 다음의 예를 보면 쉽게 이해될 것이다.
IF EXIST C:IF_ONE.TXT PRINT C:IF_ONE.BAT
위 문장은 C 드라이브의 루트 디렉토리에 IF_ONE.TXT 파일이 존재하면
프린트하라는 뜻이다. 이처럼 배치에 사용되는 문장은 일반 영어 문장의 의
미를 그대로 포용하고 있기 때문에 간단한 영어 단어 지식만 있으면 의미를
파악할 수 있다. 다른 예를 보도록 하자. MYCOPY.BAT라는 배치 파일을 다
음과 같이 만들었다고 하자.(이 예제는 앞에서 살짝 다룬 변수를 이용하였다)
rem 이 배치 파일의 이름은 MYCOPY이다.
IF EXIST %2 PAUSE Target file already exists
copy %1 %2
<예제 2-3> If Exist 형식이 사용된 간단한 배치
이 MYCOPY.BAT를 실행시키기 위해 도스 프롬프트에서 다음과 같이 입
력했는데 정상적으로 실행되지 않는다면 BOSS.TXT라는 파일이 디스크에 존
재하지 않아 IF문의 조건문이 거짓이 되기 때문이다. 하지만 두 파일이 모두
존재하여 조건을 참으로 만든다면 IAM.TXT라는 파일을 BOSS.TXT에 정상
적으로 복사할 것이다.
MYCOPY IAM.TXT BOSS.TXT
♣ IF NOT EXIST 형식
IF NOT EXIST 조건은 원하는 파일이나 대입된 변수의 값이 존재하지 않
아야 지정된 명령을 처리한다. 앞에서 다룬 IF EXIST문과 정 반대의 의미로
사용된다. 이 형식은 배치 파일 구성상 실행에 관계된 중요한 파일이 존재
하지 않을 경우 지정된 행으로 이동하여 배치 프로그램의 실행을 중단하도
록 하는데 많이 이용된다.
IF NOT EXIST %1 ECHO %1 Does Not Exist in Your disk


앞 예제 문장은 변수 %1이 존재하지 않아야만 조건값이 참이 되어 뒤에
따라오는 명령을 수행하게 된다. 이것은 NOT이라는 부정 조건이 추가되었
기 때문에 존재하지 않아야만 참이 되는 것이다.
♣ IF String1==String2 Command 형식
이 조건은 문자열이나 문자 하나를 변수로 입력받으면 배치 파일 내에 미
리 지정된 문자열과 비교하고 같으면 다음 명령을 처리하게 된다. 그리고
비교되는 두 문자열이 일치하지 않는다면 다음 행으로 건너뛰게 되는 구조
이다. 보기로 QUESTION.BAT란 간단한 파일을 만들어 보자
REM 이 배치 파일의 이름은 QUESTION.BAT이다.
ECHO OFF
IF %1==BOSS ECHO YOU ARE A BOSS...1
IF %1==HERO ECHO ARE YOU A HERO...?
IF %1==FOX ECHO IS SHE A FOXY...?
<예제 2-4> If string문을 이용한 배치 파일

위와 같이 조건을 만들었다면, 다음과 같이 입력해 보자. 해당되는 메시지
가 있을 경우는 ECHO 명령 다음에 기록된 메시지를 보여주게 된다.
C:>QUESTION BOSS
YOU ARE A BOSS...!
그러나 여기서 BOSS라는 변수를 주지 않으면 어떻게 될까? MS-DOS에서
는 Syntax error를 표시하고 에러 처리된다. 그러나 4도스라는 도스쉘을 사용
할 경우에는 이럴 때 배치 파일의 맨 첫머리에 있는 ECHO OFF만 화면에
표시하고 만다. 왜냐하면 %1에 들어올 비교 변수가 없기 때문이다. 다시 말
하자면 지정된 변수와 비교할 대상이 없기 때문에 첫 명령만 실행되고 마는
것이다. 하지만 위의 조건문 다음에 또 어떤 명령이 있었다면 변수가 없더
라도 조건문 다음에 오는 다른 명령들을 실행할 것이다.
특히 주의해야 할 점은 이들 문자열 비교시 대·소문자를 구분한다는 것
이다. 비교 대상열을 소문자로 적어 두고 변수명에 대문자로 같은 이름을
사용하면 조건 비교시 같은 변수로 판단하지 않는다는 것이다.
++ 이 문제를 해결하기 위해서는 두 문자열을 " " 로 둘러쳐 주면 사용자
가 실수로 변수를 입력치 않아도 에러 메시지를 내지 않는다. 이유는 인용
부호는 빈 문자열(EMPTY)을 생성해 주기 때문이다.
IF "%1"=="BOSS" ECHO YOU ARE A BOSS...!
IF "%1"=="HERO" ECHO ARE YOU A HERO...?
IF "%1"=="FOX" ECHO IS SHE A FOXY...?

위와 같이 해주면 에러 메시지가 나오지 않게 된다.

♣ IF NOT String1==String2 Command 형식
변수로 주어지는 문자열이 같지 않아야만 조건 뒤에 오는 명령을 실행한
다. 이 형식 역시 NOT라는 부정 조건자를 포함하고 있기 때문에 비교되는
두 변수가 일치하지 않아야만 참이 되어 연속되는 명령을 실행하게 되는것
이다.
ECHO OFF
IF NOT "%1"=="%2" COPY %1 %2
<예제 2-5> If NOT문을 이용한 배치 예제

예제에서 알 수 있듯이 두 변수가 같지 않다면 뒤에 따라오는 COPY 명
령을 수행한다. 그러나 두 변수가 같을 경우에는 거짓이 되어 계속되는 명
령을 수행하지 않는다. IF String1==String2와 IF NOT String1==String2 문장
은 서로 보완적으로 배치 파일에서 사용되어 특정 문자나 변수를 비교하는
데 이용된다.
♣ IF ERRORLEVEL value Command 형식
탈출 상태 코드(EXIT STATE VALUE)가 주어진 값보다 크거나 같으면 지
정된 도스 명령을 실행한다.
예를 들어 도스의 외부 명령어인 FORMAT.COM의 EXIT STATE VALUE
가 다음과 같다고 할 때, IF ERRORLEVEL 문의 처리 방법은 다음 예제와
같다.
VALUE
에러 레벨 처리 내용
0
포맷 성공
3
CTRL+C가 눌려져 포맷이 중단된 경우
4
디스크 에러에 의해 포맷이 실패한 경우
5
프롬프트에서 사용자가 중단한 경우




<표 2-3> FORMAT.COM의 탈출 코드값과 설명
REM 이 예제는 FORMAT 명령어의 에러 탈출 코드를 이용한 배치 파일이다.
ECHO OFF
FORMAT A:
IF ERRORLEVEL 5 GOTO NO_RESPONSE
IF ERRORLEVEL 4 GOTO ERROR
IF ERRORLEVEL 3 GOTO USER_CTRLC
ECHO SUCCESSFUL FORMAT OPERATION
GOTO DONE
:NO_RESPONE

0 Comments
제목