강좌 / 팁
기 타 배치파일 정복 -2-
2007.09.10 16:02
▶ 배치파일이란 ?
컴퓨터의 동작 상태를 살펴 보면 항상 사용자와의 상호작용에 의하여 작업이이루어진다는것을 알 수 있습니다. 도스라는 운영체제도 사용자가 명령을 입력하면 그 명령에 대해 도스가 분석하여 사용자가 원하는 실행 결과를 제공합니다.
따라서 사용자는 항상 도스 프롬프트 상에서 일일이 키보드를 이용한 타이핑으로 명령을 내려야 하고, 하나의 명령이 내려지면 완료될 때까지 다음 명령을 내릴수가 없습니다. 작업 과정이 얼마되지 않는다면 큰 상관이 없으나 그 과정이 매우 길고 복잡하다면 사용자는 지루함을 느끼게 됩니다. 또한 비록 짧은 작업과정이라도 컴퓨터를 켤때마다 매번 똑같은 과정을 일일이 지시하는 것도 귀찮을 것입니다.
이러한 경우 배치 파일은 가장 확실한 해결책입니다.
배치파일의 기능은 순차적이고 반복된 동일한 작업 과정을 몇개의 혹은 수십, 수백 개의 연관된 명령어를 하나의 파일로 집약하여 그 하나의 파일(배치파일)만 실행함으로써 원하는 작업 과정을 수행하는것입니다.배치파일에 붙는 확장자는 .bat(batch 의 약어) 입니다.도스에서 실행이 가능하기 때문에 .com, .exe 확장자가 붙는 외부 명령어와 함께 실행 가능한 파일로 분류됩니다.차이가 있다면 .com, .exe 명령어는 컴퓨터만 해석 가능한 기계어 코드로 구성되어 있는반면, 배치 파일은 사람이 알아볼수 있는 일반 텍스트로 이루어져있다는 것입니다.
그래서 사용자들은 문서작성에 이용하는 워드프로세서나 텍스트에디터 등을 이용해 배치 파일을 작성할 수 있습니다. 그러나 워드프로세서는 덩치가 크고 원래 목적이 편집과 출력을 위해 만들어진 것이므로 단순한 배치 파일을 작성하는 데는 권하고 싶지 않습니다.
저장할때도 워드프로세서 고유의 포맷(예" .hwp 확장자를 가지는 아래아한글 데이터 파일)으로 저장하면 인식이 되지 않으므로 아스키 파일로 저장해야 합니다.가장 편리한 방법은 일반 문서 에디터( 도스의 Edit, Q에디터,U에디터 등)를 이용하거나 도스의 'Copy Con' 명령으로 배치 파일을 만드는 것입니다.다음과 같이 'Copy con 파일명' 형식으로 입력하고 엔터를 누르면 도스 프롬프트 상태에서 편집할 수 있는 상태가 됩니다.
-------------------------------
C:Bats> copy con Timedate.bat
cls
time
date
^Z
1 File(s) copied
-------------------------------
여기서 쓰고 싶은 대로 적기만 하면 됩니다.제일 마지막행의 ^Z 는 파일의 제일 마지막 부분이라는 것을 도스에게 알려주는 코드로 < Ctrl + Z > 키 또는 F6 키를 누르면 됩니다. 그리고 엔터키를 한번더 누르면 '1 File(s) copied' 라는 메세지가 출력되는데, 이는 방금 ' copy con 파일명 ' 으로 작성된 문서파일이 성공적으로 만들어졌다는 뜻입니다.위의 문서파일은 확장자가 .BAT 로 붙었기 때문에 실행가능한 외부 명령어가 되는데, 배치파일은 명령이 기록되어 있는 순서대로 실행되기 때문에 timedate.bat 를 실행시키면 먼저 화면을 지우고 난뒤 시스템의 시간과 날짜를 설정합니다.간단한 배치파일은 'copy con 파일명' 으로 작성하는 것이 다른 프로그램의 도움없이 쉽고 빠르게 처리할 수 있습니다. 하지만 배치파일이 조금 길거나 작성중에 수시로 편집할 일이 생기는 경우에는 불가능합니다. 'copy con 파일명' 으로 파일을 작성하면 행으로 다시돌아갈 수 없을 ?아니라 수정이 불가능하기 때문입니다. 그러므로 배치파일을 만들 필요가 있을때는 문서 에디터를 이용하는 것이 좋습니다.
▶ 배치파일 작성 명령어 9인방
배치 파일은 파일 안에 기록되어 있는 명령의 순서대로 실행됩니다.가장 대표적인 것이 부팅에 이용되며, 컴퓨터의 루트 디렉토리에 위치하고 있는 Autoexec.bat 파일입니다. 그런데 만약 배치 파일의 실행의 순서를 순차적이 아닌멀티부팅용 Autoexec.bat 처럼 사용자 마음대로 정하고 싶다면 배치파일에 제공되는배치명령어의 용도를 알고 있어야 합니다.
1. CALL
현재 실행중인 배치 파일을 종료하지 않고 필요한 다른 배치파일을 호출하여 실행한 다음 원래의 배치파일로 다시 돌아오려고 할 때 사용됩니다.
◇ 사용법 : Call [drive:][경로]<배치파일명>[.BAT]
◇ 예 : Call c:batssample.bat
어떤 배치 파일을 실행하는 도중에 경로 C:bats 에 있는 sample.bat 파일을 실행한 다음 다시 원래의 배치파일로 돌아옵니다.
2. CHOICE
배치 프로그램 내에서 사용자의 선택을 묻기 위해 사용됩니다. 배치 파일 제작자가 설정한 물음을 출력하면서 지정된 키 입력을 기다립니다. 이 명령은 배치파일 내에서만 사용 가능합니다.
◇ 사용법 :choice [/C[:]문자열][/N][/S][/T[:]기본키,대기시간][메세지]
◇ 옵션
- /C[:]문자열 : 사용자가 선택할 수 있는 키목록을 [] 괄호 내에 ', ' 로 구분하여 출력하고 /C 스위치를 사용하지 않으면 기본적으로 YN이 사용됩니다.
- /N : 프롬프트를 출력하지 않도록 합니다.
- /S : 사용자의 입력에서 소문자, 대문자를 구분하도록 합니다.
- /T[:]기본키, 대기시간 : 기본키를 지정한 후 대기시간 동안 사용자의 키 입력이 없으면 자동적으로 기본키가 입력된 것으로 간주하고 진행됩니다. 지정 가능한 대기시간은 초단위이며 0에서 99 사이의 값입니다.
- 메세지 : 화면에 출력될 메세지를 지정합니다.
◇ 예 : choice /c:abCD /s /t : C, 5 다음중에서 하나를 선택하십시오 a, b, C, D
◇ 설명 : 입력 가능한 키를 a,b,C,D로 한정하며 사용자로부터 입력되는 영문자의 대,소문자를 구분하는데, 만약 5초 내에 사용자로부터 키 입력이 없다면 C 가 입력된 것으로 간주합니다. 그리고 화면에는
'다음중에서 하나를 선택하십시오 a, b, C, D[a,b,C,D]? '
라는 메세지가 출력됩니다.
3. ECHO
배치파일 실행중에 명령어를 화면에 표시할 것인지의 여부를 설정하며, 그 상태를 표시합니다. 한편 ECHO 명령 뒤에 오는 메세지는 화면에 나타납니다.
◇ 사용법 : echo [on/off] [문자열]
◇ 옵션
- on : 배치 파일 실행중에 그 배치 파일 내의 명령어를 화면에 표시합니다.
- off : 배치 파일 실행중에 명령어를 화면에 출력하지 않도록 합니다.
- 문자열 : 화면에 출력하고 싶은 메세지를 적어줍니다.
- 없음 : 현재 ECHO 설정 상태를 표시합니다.
◇ 예 :
echo off
☞ 현재 실행중인 배치 파일 내의 명령어를 화면에 나타나지 않도록 함.
echo
echo 안녕하세요?~
☞ 현재 echo 설정상태를 표시하며 안녕하세요?~ 라는 문구를 화면에 출력합니다.
4. FOR
지정된 집합 중의 각각의 요소에 대하여 명령으로 설정한 처리를 반복 실행합니다.
◇ 사용법
For %%<변수> IN (<집합>) DO <명령> [<옵션>] ☞ 배치파일용.
For %<변수> IN (<집합>) DO <명령> <옵션>] ☞ 순차처리용.
◇ 옵션
- %%<변수>, &<변수> : 변수로 사용되는 것은 임의의 영문자로 1자만 허용됩니다. 주의할 점은 배치파일에서 사용할 경우는 반드시 %%처럼 두개를 연달아 사용해야 하며, 일반 도스 프롬프트에서 사용할 때는 % 하나만 사용합니다.
- <집합> : %%<변수>에 대입하고 싶은 값을, 또는 스페이스로 구분하여 대입하고 싶은 순서대로 나열합니다.
- <명령> : %%<변수>에 대입되어 있는 값에대해 반복적으로 실행하고 싶은 명령을 지정합니다.
- <옵션> : 지정한 명령의 옵션이나 FOR 명령에서 지정한 옵션을 설정합니다.
◇ 예
for %%f in (bak tmp $$$) do del *.%%f /p ☞ 배치파일의 경우
for %d in (read,wh,file) do hlist %d*.* ☞ 도스 프롬프트에서 실행시
◇ 설명 : 첫 번째는 bak, tmp, $$$ 를 순서대로 %%f 환경 변수에 대입하여 차례대로
DEL *.bak /p, DEL *.tmp /p, DEL *.$$$ .p 를 실행한 것과 동일한 결과를 얻게됨.
두번째는 READ,WH,FILE 를 순서대로 %d 환경변수에 대입하여 차례대로
HLIST READ*.*, HLIS TWH *.* , HLIST FILE *.* 를 실행한 것과 동일한 결과를 얻게 됩니다.
5. GOTO
배치 처리의 흐름을 <레이블>에서 정의되어 있는 위치로 옮깁니다.
◇ 사용법 :Goto <레이블>
◇ 예 :
goto loop
:loop
각종 처리할 내용
◇ 설명 : 레이블 loop 로 배치 처리의 제어권을 이동시켜 loop 항목에 지정된 각종 처리할 내용을 실행시킵니다.
◇ 참고 : 배치 파일에 레이블 표시는 레이블명 앞에 콜론(:) 을 붙여주며 줄을
바꿔 맨 앞에 지정해 주어야 합니다.
6. IF
지정한 조건의 판단 결과에 따라서 배치 처리를 진행합니다.
◇ 사용법 : If [NOT] <조건> <명령>
◇ 옵션
- NOT : 지정한 조건의 반대 조건일 때만 실행합니다.
- 조건
- ERRORLEVEL <수치> : 바로 전에 실행한 명령(프로그램)의 종료 코드가 <수치> 이상일 때에는 참이 되고 <명령> 이 실행됨.
- <문자열1> == <문자열2> : <문자열1> 과 <문자열2> 가 같을 때에만 참이되고 <명령>이 실행됩니다. 주의할 점은 문자열의 대,소문자가 구별되며, 문자열중에 구분기호(콤마,스페이스,세미콜론,등호,탭)가 포함되어 있으면 않됩니다.
- EXIST <파일명> : <파일명>으로 지정한 파일(경로포함)이 존재할 때에만 참이 되고 <명령>이 실행됩니다. <파일명>에는 와일드카드 문자의 사용이 가능합니다.
◇ 예 :
if errorlevel 2 goto quit
if not %1 ==%2 goto process
if exist d:worktemp.$$$ del d:worktemp.$$$
◇ 설명 :
직전에 실행한 명령의 종료 코드가 2 이상일 경우 레이블 QUIT로 이동합니다.
환경변수 %1과 환경변수 %2에 대입되어 있는 문자열이 같지 않을 경우에만 레이블 PROCESS 로 이동합니다.
경로 D:Work 에 temp.$$$ 라는 파일이 존재하면 그 파일을 삭제합니다.
7. PAUSE
배치 파일 실행을 일시 정지합니다.
◇ 사용법 :Pause [문자열]
◇ 옵션
- 문자열 : 문자열을 생략하면 'press any key to continue...'라는 메세지가 화면에 출력됩니다. 만약 PAUSE 명령 뒤에 어떤 메세지를 지정하여 그 메시지를 출력하고 싶다면 'Echo On' 명령을 우선 내려야 합니다.
◇ 예 :
echo on
pause 준비가 되었으면 아무키나 누르세요...
◇ 설명 : 배치 처리 중 pause명령을 만났을때 임의의 다른 메시지를 화면에 출력하고 싶다면 예 에서와 같이 반드시 echo on 명령이 선행되어야 하며 예의 경우에는 ' 준비가 되었으면 아무키나 누르세요...' 라는 메세지가 출력됩니다.
◇ 참고 : 위 처럼 하면 화면에 Pause 라는 명령어까지 같이 출력되므로 이런경우
echo on
echo 준비가 되었으면 아무키나 누르세요...
pause > Null
이런식으로 사용하면 출력하고자 하는 메세지만 화면에 출력됩니다.
8. REM
배치 파일 내에 주석문을 부여하고 싶을 때 사용합니다.
◇ 사용법 :rem [문자열]
◇ 옵션
- 문자열 : 주석문으로 쓰고 싶은 것을 적어줍니다.
◇ 예 : REM 이 배치파일은 샘플입니다.
배치파일내의 적당한 위치에 적절한 주석문을 붙여두면 배치 처리의 흐름을 일목요연하게 볼 수 있습니다.
9. SHIFT
배치 파일에 주어진 파라미터(%1~%9)와 실행시에 지정되는 값과의 대응을 하나씩 뒤로 이동하여 표시합니다.
◇ 예
:loop
if "%1" == " " goto end
echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
goto loop
:end
위와 같이 배치 파일을 작성해두고 다음과 같이 배치파일을 실행해 보면 shift 명령이 어떤 역할을 하는지 금방 알 수 있습니다..
C:bats> test.bat A B C D E F G H I J 0 1 2 3 4 5 ☜똑같이 입력하고 실행후 확인
1.배치파일(Batch File, 일괄처리용 화일)
1.1. 배치파일?
Batch(배치)는 '한 묶음','한벌'의 의미하며, 배치파일은 여러 가지 명령어를 한 파일에 모아 작업하는 파일, 즉 하나의 일을 처리하기 위해 여러번 내리는 명령어를 한 번만에 처리할 수 있도록 만들어 놓은 실행파일이다.
① 확장자 이름은 반드시 'BAT'이어야 한다.
② 파일명은 도스의 내부명령어 이름을 피하라.
③ COM, EXE 파일의 이름을 피하라.
④ 명령어 이름이 서로 같아 충돌할 때, DOS는 도스키-->내부명령-->외부명령( *.COM-->*.EXE)-->*.BAT) 순으로 실행한다.
다만 '파일명.BAT'라고 확장자 이름까지 써서 명령을 내리면 이런 문제는 해결된다.
⑤ BAT파일은 표준 ASCII 문장(Text) 파일이어야 한다.
1.2. BAT파일 만드는 방법.
일반 도스 명령어와 배치전용 명령어를 사용하여 다음의 3가지 방식을 사용하여 아스키 문장파일 형식으로 만든다.
① COPY명령사용 .... C:>COPY CON XXXX.BAT
② 문서편집기 이용 ... 'EDIT', 'SAN'
③ 문서 작성기(WordProcessor) .. 아래한글,훈민정음 등
작성 예①) C:>COPY CON SAMPLE.BAT <엔터>
───── CLS
DIR A:
V3 C:
^Z
1 File(s) Copied
<설명1> COPY 명령을 사용하여 텍스트 파일 만드는 방법을 이용한다.
CON은 장치 파일명으로 여기서는 키보드를 지칭한다.키보드로 입력한 문자를 SAMPLE.BAT라는 파일명으로 복사.출력하라는 뜻이다.
입력한 배치 내용을 보면
화면을 깨끗이지우고(CLS), A드라이브의 파일목록을 보이라, 그리고 C 디스크에 바이러스 감염 여부를 점검.치료하라는 명령이다.
줄을 바꿀 때는 항상 엔터하면 된다. 끝낼 때는 언제나 Ctrl+Z 또는 F6키를 누르고 엔터하면 1개 파일이 복사되었다는 메시지가 나오면서 C루트에 SAMPLE.BAT란 파일이 1개 생긴다.
<실행> C:>SAMPLE <엔터>하면 배치파일 내용 순서데로 명령을 실행한다.
-----
작성 예②) C:>EDIT <엔터>
도스 편집기 화면이 뜬다. 이때 ESC키를 한번 눌러 메시지 상자를 제거하고 깨끗한 화면에다 첫째 줄부터 입력하되, 줄을 바꿀 때는 엔터한다.
CLS
DIR A:
V3 C:
끝내려고 저장글쇠(@F,S)를 누르면 파일이름을 써넣으라고 상자자 나온다. SAMPLE.BAT라고 입력하고 <엔터>하여 저장한 후, 에디트를 끝(@F, X)낸다.그러면 C루트 디렉토리에 SAMPLE.BAT 라는 배치파일이 생긴다.
<실행> C:>SAMPLE <엔터>하면 C루트에 있는 SAMPLE.BAT 파일이 실행된다.
******* 배치파일 내용에 파일스펙 경로명을 쓸 때 주의점.****
ⓐ 배치파일 내용 중에
C:GAMESUPERSUPER.EXE 라고 해놓으면
현재 도스 작업방을 바꾸지 말고 C:GAMESUPER 방에있는 SUPER.EXE를 실행하라는 뜻이기 때문에 경우에 따라서는 실행이 되지 않는다.
ⓑ 배치 내용을 아래와 같이 하면 틀림없이 실행하게 된다.
C:
CDGAMESUPER
SUPER
현재 도스작업방이 먼저 C드라이브로 바뀌고,절대경로명 CDGAMESUPER
디렉토리로 이동한 후에 SUPER.EXE 파일을 실행한다 ******
1.3.배치파일 명령어들
① 일반적인 도스명령를 그대로 사용한다.
CLS COPY DEL DIR DATE TIME PAYH PROMPT CHKDSK 등등.
② 배치에만 사용하는 전용 명령가 있다.
ECHO REM PAUSE CALL GOTO CHOICE IF FOR SHIFT
(메아리)(설명) (쉼) (부름) (가기) (선택) (조건)(순환) (옮김)
ⓐ REM
[베치파일 속에 달고 싶은 설명.주석]....설명이 화면에 나옴.
ⓑ PAUSE
배치파일 실행중 일시 멈추게함.
화면에 'Press any key to continue...'
(계속하려면 아무키나 누르세요)
배치실행을 중단하려면 Ctrl+C키를 누른다. 그러면 화면에
'Terminate batch job (Y/N)?'
(배치작업을 끝내겠읍니까?) Yes / No
ⓒ ECHO 명령
형식> ECHO 문자열
에코명령 다음에 오는 문자열을 화면에 나타낸다.
ECHO ON
이후부터 '명령어'라인을 화면에 보인다.(도스 초기값)
ECHO OFF
이후 실행되는 명령어 라인을 화면에 나타내지 않는다.
화면이 깨끗하고, 화면출력속도.가독성 증가한다.
'ECHO OFF'라는 그 자체까지 보이지 않게 하려면 @ 을 앞에 쓴
다.( @ECHO OFF )
ECHO
현재 ECHO ON/OFF 상태를 확인한다.
<예> C:>COPY CON EDIT2.bat
ECHO OFF
이후에 실행되는 명령어는 화면에 나타나지 않는다.
화면에 ECHO OFF 자체는 나타난다.
TB
태백한글을 메모리에 상주 띄우기.
각자 지원되는 다른 한글코드(HANME,HT,DKBY 등)를
실행하면 된다.
한글도스인 때는 HBIOS.COM을 실행한다.
PAUSE
잠시 중지. 엔터하면 다시 진행한다.
CLS
화면청소
ECHO 'This is Hangul Edit.'
'문자열'을 화면에 출력한다.
PAUSE
REM NOW,DOS EDIT IS HANGUL EDITOR.
REM 다음에 오는 설명은 화면에 나오지 않는다. 다만
사용자가 배치파일 내용을 볼 때 참고할 내용이다.
ECHO ON
이후에 실행되는 명령어는 화면에 나타남
EDIT
도스 에디터 화면이 나오면 한글로 문서를 작성.저장한
후 끝낸다.
@ECHO OFF
이후에 실행되는 명령어는 화면에 나타나지 않는다.
ECHO OFF자체도 나타나지않음.
TB/U
태백한글 메모리서 제거한다.
CLS
^Z
CTRL+Z 또는 F6를 누른다.
1 File(s) Copied
실습을 위하여 일부러 여러가지 명령 종류를 써 보았으며,한글로 설 명을 하느라고 줄이 떨어졌으나 각자 실습할 때는 영문글자 부분만 쓰고 엔터하여 줄울 바꾸고 줄간격을 붙여가며 쓴다.
<실행 예> C:>EDIT2 <엔터> 하면
위의 내용을 순서데로 실행하고 도스 문서편집기가 화면에 나타난다. 문서작성기를 끝내면 한글프로그램을 메모리에서 제거하고 도스로 나온다
1.4 배치파일 전용 명령에서
? 판단과 분기에 관한 명령 .... CALL, CHOICE, IF, GOTO
앞에서 공부한 배치파일의 경우는 입력된 명령어들의 순서데로 실행되었었지만, 판단과 분기의 명령들은 명령어의 실행의 흐름을 사용자가 임의로 변경,지정할 수있어 배치파일의 기능을 보다 강력하게 한다.
분기 명령..배치파일의 순차적 수행을 필요에 따라 변경할 때 사용하며
배치파일에 프로그램적 기능을 갖게하는 명령이다.
조건분기(Conditional Branching).......IF명령
무조건분기(Unconditional Branching)...GOTO명령
① CALL [배치파일 인자]
배치파일 실행 중 다른 배치파일을 도중에 호출하여 실행시키고 다시
원래 배치파일로 돌아오게 하는 명령이다.
<예> H1.BAT의 내용이 'DIR C: > A:MDIRLIST.TXT' ( C루트의 파일목
록을 A드라이브에 MDIRLIST.TXT 란 파일로 출력하라) 이라고 하자.
C:>COPY CON H2.BAT
CALL H1.BAT
TYPE A:MDIRLIST
^Z
<실행> C:>H2 엔터하면 H1.BAT란 배치파일을 불러(CALL) 실행하여 MDIRLIST.TXT 파일을 A드라이브에 만든 후, 다시 H2.BAT 파일로 돌아와서 A드라이브의 'MDIRLIST.TXT' 파일을 화면에 타이프해 보인다.
② IF 조건
주어진 조건에 따라 명령을 선별적으로 선택.실행케 하는 명령이다.
IF EXIST [파일이름] [명령]
찾는 파일이 존재하면 명령을 실행하라
IF NOT EXIT [파일이름] [명령]
찾는 파일이 없으면 명령을 실행하라
<예> IF EXIST *.BAK DEL *.BAK
BAK라는 백업파일이 있으면 모두 지워버리라.
IF [NOT] "문자열1" == "문자열2" [명령]
"문자열1"과 "문자열2"가 서로 일치 [불일치] 하면 명령을 실행하라. (양쪽 비교 문자열의 영문 대소문자를 구분한다)
==은 EQ로, !=은 같지 않다는 부호인데 NE로 대신할 수 있다.
문자열은 " " 으로 반드시 구분하고 부호와는 한 칸 띈다.
<예> C:>COPY CON TEST1.BAT
@ECHO OFF
IF "%1" == "A" ECHO TESTING A
IF NOT "%1" == "A" ECHO IT IS NOT EQUAL.
^z
<실행> C:>TEST1 A 엔터하면 화면에 TESTING A 라고 표시한다.
C:>TEST1 C 엔터하면 A와 같지 않으므로 IT IS NOT EQUAL 라고 표시한다.
IF [NOT] ERRORLEVEL [값] [명령]
IF명령 바로 앞에서 수행되었던 프로그램이 수행을 마치면서 남긴 종료코드(ExitCode)를 검사하여 지정 값보다 크면(작으면) 명령을 실행하라는 뜻이다.
종료코드를 발생하는 명령어(FORMAT,XCOPY,COPY,BACKUP,RESTORE 등 일
반 도스명령어들 메뉴얼 참조)들은 0~255 범위에서 종료코드(EXITCODE)
값을 가지는데
에를 들면 XCOPY명령에서 성공적 수행일 때는 0, 화일이 없을 때 1, CTRL+C로 중단하면 2, 초기화 오류발생 때는 4, 디스크 에러에는 5를 반환하는 식으로 정해저 있다.
예> C:>COPY CON XY.BAT
XCOPY %1 A:
IF NOT ERRORLEEVEL 0 ECHO COPY FAILED !
IF ERRORLEVEL 0 ECHO SUCCESSFULLY !
^Z
실행> C:>XY *.* 엔터하면 성공적 수행여부에 따라 'FAILED !' 또는
'SUCCESSFULLY !' 라는 메시지가 나온다.
③ GOTO [레이블이름]
레이블 이름이 있는 행으로 실행 순서를 옮긴다.
'레이블(Label)'은 8자이 내로, 레이블 앞에는 콜론(:)을 사용한다.
<예> 현재 디렉토리에 *.HWP 파일을 C:HNCDOC 디렉토리로 옮겨주는
배치파일을 만들어 보자.
C:>COPY CON HWPMV.BAT
@ECHO OFF
IF NOT EXIST *.HWP GOTO FIRST
MOVE /-Y *.HWP C:HNCDOC
ECHO HWPFILE MOVE DONE !
GOTO END
:FIRST
ECHO *.HWP FILE NOT FOUND !
:END
^Z
실행> C:>HWPMV 엔터하면 C루트 디렉토리에 있는 모든 HWP 파일을 C:HNCDOC 디렉토리로 옮기고 'HWP 파일을 모두 옮겼다'는 메시지를 화면에 보이고 END(끝) 레이블로 와서 도스상태로 빠저나 온다. 옮길 HWP 파일이 없으면 ' HWP 파일을 찾지 못했다'는 메시지가 나오고 끝(END) 낸다.
GOTO 문에서는 항상 END 레이블로 배치를 끝낸다.
배치 안에서 COPY,XCOPY,MOVE 명령은 /-Y 스위치를 써야 만이 목적지에 같은 이름의 파일이 있을 경우 덮어 쓸지여부를 확인하는 메시지를 출력한다.
④ 의사변수(Dummy Variables 가상의 변수)
바꿔 쓸 수 있는 인자(Replaceable Parameter)를 의사변수라 하며,
%0 ~ %9(10개)으로 표시한다.
형식> C:>명령어 파일1 파일2 " " " " " " 파일9
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
작성예1> C:>COPY CON DIRALL.BAT
DIR %1
pause
DIR %2
pause
type %0
^Z
실행예> C:>DIRALL A: B: (엔터)
설명> 위 '실행 예'에서 명령어 DIRALL(.BAT)은 %0, A:은 %1, B:은 %2 에 해당하므로 '작성예1'의 내용 중 %1,%2,%0에 대입하여 명령을 수행한 결과가 화면에 나오게 된다. 즉 화면에는 'DIR A:'과, 'DIR B:'이 차례로 출력되고 멈췄다가 'DIRALL.BAT' 파일 내용이 출력된다.
작성예2> C:>COPY CON EDIT2.BAT
@ECHO OFF
CLS
TB .....tb라는 프로그램을 메모리에 설치
EDIT %1 ......%1은 '지정 파일'로 대체된다.
TB/U .......태백 한글을 메모리에서 제거
^Z
실행예> C:>EDIT2 SAMPLE.TXT (엔터)
%0 %1
설명> 위 '실행예'에서 명령어(EDIT2.BAT)는 %0, 파일1(SAMPLE.TXT)은 %1 에 해당하므로, '작성예2'의 배치파일 내용중 %1 대신에 SAMPLE.TXT라는 텍스트 파일이 대입된다.
화면은 한글을 읽고 쓸 수 있도록 태백한글을 메모리에 상주시킨다. 편집기는 SAMPLE.TXT 라는 파일을 읽어 화면에 띄워 수정.삽입 등 편집하고 저장할 수 있다. 편집을 끝내면 한글코드가 메모리에서 제거된다.
⑤ SHIFT
쉬프트는 옮김,변위를 의미하는 데 10개 이상의 대체 인자(Replaceable
Paramete)도 사용 가능하다. 대체인자를 한 자리씩 왼쪽으로 이동한다.
작성예> 지정한 문장(text) 파일들을 차례로 TYPE시키는 배치파일 예.
A:>COPY CON TELLME.BAT
@ECHO OFF
:BEGIN
IF NOT EXIST %1 GOTO END
TYPE %1
SHIFT
GOTO BEGIN
:END
ECHO 더이상 파일이 없습니다.
^Z
실행예> A:>TELLME AAA.TXT BBB.TXT CCC.TXT ......... 엔터
%0 %1 %2 %3 ........%15
설명> 위 '실행예'의 텍스트 파일명은 특정해야 하며 Wildcard문자(*,?)는 사용할 수 없다. 지정된 여러 파일들에 %1 변수가 차례로 SHIFT(변위)되면서 파일을 대입시켜 내용을 출력한다.
즉 AAA.TXT가 먼저 %1이 되고, 다음 BBB.TXT, 또 CCC.TXT, .....등이 %1에 대입된다. 계속 10개 이상의 변수도 지정할 수 있다.
지정된 파일이 모두 옮겨 대입되고 나면 배치파일이 끝나게 된다. 배치파일 내용 중 GOTO 명령에서 BEGIN 레이블로 가서 다시 시작하게하는 것을 LOOP(고리)라고 한다.
⑥ FOR
FOR 명령은 지정된 횟수 만큼 배치파일이 같은 명령을 계속 반복하게하는 명령, 즉 반복수행 (Looping) 명령이다.
형식) FOR %%변수 IN (셋트 파라미터) DO [명령어] %%변수
'(셋트 파라미터)'는 일련의 많은 갯수의 파일들을 말하고, '%%변수'는 SET에 명시된 각 파일에 순차적으로 설정되어 명령을 실행하는 대입변수이다.
셋트 파라미터에 와일드카드문자(*,?)를 사용할 수 있다.
작성예> 확장명이 BAT,DOC,TXT,CAP인 문장 파일 모두를 차례로 화면에 출력(TYPE)되게 배치파일을 만들어 보자.
C:> COPY CON TYPEALL.BAT
FOR %%Z IN (*.BAT *.DOC *.TXT *.CAP) DO TYPE %%Z
^Z
<실행> C:>TYPEALL C:MDIR*.BAT 엔터
(*.BAT, *.DOC, *.TXT, *.CAP 중에서 한 종류 파일만 지정한다.)
위 TYPEALL.BAT 파일을 실행할 때는 파일스펙(경로특정)이 있어야 한다.
2. 자동형 배치파일 (Aautoexec.bat)
일반배치파일 만들기와 동일하며 다만 이름만 AUTOEXEC.BAT로 한다.
컴퓨터를 구입할 때 이미 작성되어 있으므로 그 내용만 자기 필요에 따라 변경하면 될 것이다. 만약을 위해 원본 파일을 다른 곳에 백업해 놓고 필요시 다시 복사하면 좋을 것이다.
<작성예> C:>COPY CON AUTOEXEC.BAT
@ECHO OFF
CLS
SMARTDRV
LH V3RES
PROMPT $P$G
PATH=C:;C:DOS;C:MDIR;C:V&P
LH DOSKEY
M
^Z
1 FIle(s) Copied
① 컴퓨터가 부팅할 때 DOS 시스템 프로그램을 메모리에 상주시킨 후
곧 바로 자동실행 배치파일의 내용의 명령들을 실행한다.
컴퓨터의 동작 상태를 살펴 보면 항상 사용자와의 상호작용에 의하여 작업이이루어진다는것을 알 수 있습니다. 도스라는 운영체제도 사용자가 명령을 입력하면 그 명령에 대해 도스가 분석하여 사용자가 원하는 실행 결과를 제공합니다.
따라서 사용자는 항상 도스 프롬프트 상에서 일일이 키보드를 이용한 타이핑으로 명령을 내려야 하고, 하나의 명령이 내려지면 완료될 때까지 다음 명령을 내릴수가 없습니다. 작업 과정이 얼마되지 않는다면 큰 상관이 없으나 그 과정이 매우 길고 복잡하다면 사용자는 지루함을 느끼게 됩니다. 또한 비록 짧은 작업과정이라도 컴퓨터를 켤때마다 매번 똑같은 과정을 일일이 지시하는 것도 귀찮을 것입니다.
이러한 경우 배치 파일은 가장 확실한 해결책입니다.
배치파일의 기능은 순차적이고 반복된 동일한 작업 과정을 몇개의 혹은 수십, 수백 개의 연관된 명령어를 하나의 파일로 집약하여 그 하나의 파일(배치파일)만 실행함으로써 원하는 작업 과정을 수행하는것입니다.배치파일에 붙는 확장자는 .bat(batch 의 약어) 입니다.도스에서 실행이 가능하기 때문에 .com, .exe 확장자가 붙는 외부 명령어와 함께 실행 가능한 파일로 분류됩니다.차이가 있다면 .com, .exe 명령어는 컴퓨터만 해석 가능한 기계어 코드로 구성되어 있는반면, 배치 파일은 사람이 알아볼수 있는 일반 텍스트로 이루어져있다는 것입니다.
그래서 사용자들은 문서작성에 이용하는 워드프로세서나 텍스트에디터 등을 이용해 배치 파일을 작성할 수 있습니다. 그러나 워드프로세서는 덩치가 크고 원래 목적이 편집과 출력을 위해 만들어진 것이므로 단순한 배치 파일을 작성하는 데는 권하고 싶지 않습니다.
저장할때도 워드프로세서 고유의 포맷(예" .hwp 확장자를 가지는 아래아한글 데이터 파일)으로 저장하면 인식이 되지 않으므로 아스키 파일로 저장해야 합니다.가장 편리한 방법은 일반 문서 에디터( 도스의 Edit, Q에디터,U에디터 등)를 이용하거나 도스의 'Copy Con' 명령으로 배치 파일을 만드는 것입니다.다음과 같이 'Copy con 파일명' 형식으로 입력하고 엔터를 누르면 도스 프롬프트 상태에서 편집할 수 있는 상태가 됩니다.
-------------------------------
C:Bats> copy con Timedate.bat
cls
time
date
^Z
1 File(s) copied
-------------------------------
여기서 쓰고 싶은 대로 적기만 하면 됩니다.제일 마지막행의 ^Z 는 파일의 제일 마지막 부분이라는 것을 도스에게 알려주는 코드로 < Ctrl + Z > 키 또는 F6 키를 누르면 됩니다. 그리고 엔터키를 한번더 누르면 '1 File(s) copied' 라는 메세지가 출력되는데, 이는 방금 ' copy con 파일명 ' 으로 작성된 문서파일이 성공적으로 만들어졌다는 뜻입니다.위의 문서파일은 확장자가 .BAT 로 붙었기 때문에 실행가능한 외부 명령어가 되는데, 배치파일은 명령이 기록되어 있는 순서대로 실행되기 때문에 timedate.bat 를 실행시키면 먼저 화면을 지우고 난뒤 시스템의 시간과 날짜를 설정합니다.간단한 배치파일은 'copy con 파일명' 으로 작성하는 것이 다른 프로그램의 도움없이 쉽고 빠르게 처리할 수 있습니다. 하지만 배치파일이 조금 길거나 작성중에 수시로 편집할 일이 생기는 경우에는 불가능합니다. 'copy con 파일명' 으로 파일을 작성하면 행으로 다시돌아갈 수 없을 ?아니라 수정이 불가능하기 때문입니다. 그러므로 배치파일을 만들 필요가 있을때는 문서 에디터를 이용하는 것이 좋습니다.
▶ 배치파일 작성 명령어 9인방
배치 파일은 파일 안에 기록되어 있는 명령의 순서대로 실행됩니다.가장 대표적인 것이 부팅에 이용되며, 컴퓨터의 루트 디렉토리에 위치하고 있는 Autoexec.bat 파일입니다. 그런데 만약 배치 파일의 실행의 순서를 순차적이 아닌멀티부팅용 Autoexec.bat 처럼 사용자 마음대로 정하고 싶다면 배치파일에 제공되는배치명령어의 용도를 알고 있어야 합니다.
1. CALL
현재 실행중인 배치 파일을 종료하지 않고 필요한 다른 배치파일을 호출하여 실행한 다음 원래의 배치파일로 다시 돌아오려고 할 때 사용됩니다.
◇ 사용법 : Call [drive:][경로]<배치파일명>[.BAT]
◇ 예 : Call c:batssample.bat
어떤 배치 파일을 실행하는 도중에 경로 C:bats 에 있는 sample.bat 파일을 실행한 다음 다시 원래의 배치파일로 돌아옵니다.
2. CHOICE
배치 프로그램 내에서 사용자의 선택을 묻기 위해 사용됩니다. 배치 파일 제작자가 설정한 물음을 출력하면서 지정된 키 입력을 기다립니다. 이 명령은 배치파일 내에서만 사용 가능합니다.
◇ 사용법 :choice [/C[:]문자열][/N][/S][/T[:]기본키,대기시간][메세지]
◇ 옵션
- /C[:]문자열 : 사용자가 선택할 수 있는 키목록을 [] 괄호 내에 ', ' 로 구분하여 출력하고 /C 스위치를 사용하지 않으면 기본적으로 YN이 사용됩니다.
- /N : 프롬프트를 출력하지 않도록 합니다.
- /S : 사용자의 입력에서 소문자, 대문자를 구분하도록 합니다.
- /T[:]기본키, 대기시간 : 기본키를 지정한 후 대기시간 동안 사용자의 키 입력이 없으면 자동적으로 기본키가 입력된 것으로 간주하고 진행됩니다. 지정 가능한 대기시간은 초단위이며 0에서 99 사이의 값입니다.
- 메세지 : 화면에 출력될 메세지를 지정합니다.
◇ 예 : choice /c:abCD /s /t : C, 5 다음중에서 하나를 선택하십시오 a, b, C, D
◇ 설명 : 입력 가능한 키를 a,b,C,D로 한정하며 사용자로부터 입력되는 영문자의 대,소문자를 구분하는데, 만약 5초 내에 사용자로부터 키 입력이 없다면 C 가 입력된 것으로 간주합니다. 그리고 화면에는
'다음중에서 하나를 선택하십시오 a, b, C, D[a,b,C,D]? '
라는 메세지가 출력됩니다.
3. ECHO
배치파일 실행중에 명령어를 화면에 표시할 것인지의 여부를 설정하며, 그 상태를 표시합니다. 한편 ECHO 명령 뒤에 오는 메세지는 화면에 나타납니다.
◇ 사용법 : echo [on/off] [문자열]
◇ 옵션
- on : 배치 파일 실행중에 그 배치 파일 내의 명령어를 화면에 표시합니다.
- off : 배치 파일 실행중에 명령어를 화면에 출력하지 않도록 합니다.
- 문자열 : 화면에 출력하고 싶은 메세지를 적어줍니다.
- 없음 : 현재 ECHO 설정 상태를 표시합니다.
◇ 예 :
echo off
☞ 현재 실행중인 배치 파일 내의 명령어를 화면에 나타나지 않도록 함.
echo
echo 안녕하세요?~
☞ 현재 echo 설정상태를 표시하며 안녕하세요?~ 라는 문구를 화면에 출력합니다.
4. FOR
지정된 집합 중의 각각의 요소에 대하여 명령으로 설정한 처리를 반복 실행합니다.
◇ 사용법
For %%<변수> IN (<집합>) DO <명령> [<옵션>] ☞ 배치파일용.
For %<변수> IN (<집합>) DO <명령> <옵션>] ☞ 순차처리용.
◇ 옵션
- %%<변수>, &<변수> : 변수로 사용되는 것은 임의의 영문자로 1자만 허용됩니다. 주의할 점은 배치파일에서 사용할 경우는 반드시 %%처럼 두개를 연달아 사용해야 하며, 일반 도스 프롬프트에서 사용할 때는 % 하나만 사용합니다.
- <집합> : %%<변수>에 대입하고 싶은 값을, 또는 스페이스로 구분하여 대입하고 싶은 순서대로 나열합니다.
- <명령> : %%<변수>에 대입되어 있는 값에대해 반복적으로 실행하고 싶은 명령을 지정합니다.
- <옵션> : 지정한 명령의 옵션이나 FOR 명령에서 지정한 옵션을 설정합니다.
◇ 예
for %%f in (bak tmp $$$) do del *.%%f /p ☞ 배치파일의 경우
for %d in (read,wh,file) do hlist %d*.* ☞ 도스 프롬프트에서 실행시
◇ 설명 : 첫 번째는 bak, tmp, $$$ 를 순서대로 %%f 환경 변수에 대입하여 차례대로
DEL *.bak /p, DEL *.tmp /p, DEL *.$$$ .p 를 실행한 것과 동일한 결과를 얻게됨.
두번째는 READ,WH,FILE 를 순서대로 %d 환경변수에 대입하여 차례대로
HLIST READ*.*, HLIS TWH *.* , HLIST FILE *.* 를 실행한 것과 동일한 결과를 얻게 됩니다.
5. GOTO
배치 처리의 흐름을 <레이블>에서 정의되어 있는 위치로 옮깁니다.
◇ 사용법 :Goto <레이블>
◇ 예 :
goto loop
:loop
각종 처리할 내용
◇ 설명 : 레이블 loop 로 배치 처리의 제어권을 이동시켜 loop 항목에 지정된 각종 처리할 내용을 실행시킵니다.
◇ 참고 : 배치 파일에 레이블 표시는 레이블명 앞에 콜론(:) 을 붙여주며 줄을
바꿔 맨 앞에 지정해 주어야 합니다.
6. IF
지정한 조건의 판단 결과에 따라서 배치 처리를 진행합니다.
◇ 사용법 : If [NOT] <조건> <명령>
◇ 옵션
- NOT : 지정한 조건의 반대 조건일 때만 실행합니다.
- 조건
- ERRORLEVEL <수치> : 바로 전에 실행한 명령(프로그램)의 종료 코드가 <수치> 이상일 때에는 참이 되고 <명령> 이 실행됨.
- <문자열1> == <문자열2> : <문자열1> 과 <문자열2> 가 같을 때에만 참이되고 <명령>이 실행됩니다. 주의할 점은 문자열의 대,소문자가 구별되며, 문자열중에 구분기호(콤마,스페이스,세미콜론,등호,탭)가 포함되어 있으면 않됩니다.
- EXIST <파일명> : <파일명>으로 지정한 파일(경로포함)이 존재할 때에만 참이 되고 <명령>이 실행됩니다. <파일명>에는 와일드카드 문자의 사용이 가능합니다.
◇ 예 :
if errorlevel 2 goto quit
if not %1 ==%2 goto process
if exist d:worktemp.$$$ del d:worktemp.$$$
◇ 설명 :
직전에 실행한 명령의 종료 코드가 2 이상일 경우 레이블 QUIT로 이동합니다.
환경변수 %1과 환경변수 %2에 대입되어 있는 문자열이 같지 않을 경우에만 레이블 PROCESS 로 이동합니다.
경로 D:Work 에 temp.$$$ 라는 파일이 존재하면 그 파일을 삭제합니다.
7. PAUSE
배치 파일 실행을 일시 정지합니다.
◇ 사용법 :Pause [문자열]
◇ 옵션
- 문자열 : 문자열을 생략하면 'press any key to continue...'라는 메세지가 화면에 출력됩니다. 만약 PAUSE 명령 뒤에 어떤 메세지를 지정하여 그 메시지를 출력하고 싶다면 'Echo On' 명령을 우선 내려야 합니다.
◇ 예 :
echo on
pause 준비가 되었으면 아무키나 누르세요...
◇ 설명 : 배치 처리 중 pause명령을 만났을때 임의의 다른 메시지를 화면에 출력하고 싶다면 예 에서와 같이 반드시 echo on 명령이 선행되어야 하며 예의 경우에는 ' 준비가 되었으면 아무키나 누르세요...' 라는 메세지가 출력됩니다.
◇ 참고 : 위 처럼 하면 화면에 Pause 라는 명령어까지 같이 출력되므로 이런경우
echo on
echo 준비가 되었으면 아무키나 누르세요...
pause > Null
이런식으로 사용하면 출력하고자 하는 메세지만 화면에 출력됩니다.
8. REM
배치 파일 내에 주석문을 부여하고 싶을 때 사용합니다.
◇ 사용법 :rem [문자열]
◇ 옵션
- 문자열 : 주석문으로 쓰고 싶은 것을 적어줍니다.
◇ 예 : REM 이 배치파일은 샘플입니다.
배치파일내의 적당한 위치에 적절한 주석문을 붙여두면 배치 처리의 흐름을 일목요연하게 볼 수 있습니다.
9. SHIFT
배치 파일에 주어진 파라미터(%1~%9)와 실행시에 지정되는 값과의 대응을 하나씩 뒤로 이동하여 표시합니다.
◇ 예
:loop
if "%1" == " " goto end
echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
goto loop
:end
위와 같이 배치 파일을 작성해두고 다음과 같이 배치파일을 실행해 보면 shift 명령이 어떤 역할을 하는지 금방 알 수 있습니다..
C:bats> test.bat A B C D E F G H I J 0 1 2 3 4 5 ☜똑같이 입력하고 실행후 확인
1.배치파일(Batch File, 일괄처리용 화일)
1.1. 배치파일?
Batch(배치)는 '한 묶음','한벌'의 의미하며, 배치파일은 여러 가지 명령어를 한 파일에 모아 작업하는 파일, 즉 하나의 일을 처리하기 위해 여러번 내리는 명령어를 한 번만에 처리할 수 있도록 만들어 놓은 실행파일이다.
① 확장자 이름은 반드시 'BAT'이어야 한다.
② 파일명은 도스의 내부명령어 이름을 피하라.
③ COM, EXE 파일의 이름을 피하라.
④ 명령어 이름이 서로 같아 충돌할 때, DOS는 도스키-->내부명령-->외부명령( *.COM-->*.EXE)-->*.BAT) 순으로 실행한다.
다만 '파일명.BAT'라고 확장자 이름까지 써서 명령을 내리면 이런 문제는 해결된다.
⑤ BAT파일은 표준 ASCII 문장(Text) 파일이어야 한다.
1.2. BAT파일 만드는 방법.
일반 도스 명령어와 배치전용 명령어를 사용하여 다음의 3가지 방식을 사용하여 아스키 문장파일 형식으로 만든다.
① COPY명령사용 .... C:>COPY CON XXXX.BAT
② 문서편집기 이용 ... 'EDIT', 'SAN'
③ 문서 작성기(WordProcessor) .. 아래한글,훈민정음 등
작성 예①) C:>COPY CON SAMPLE.BAT <엔터>
───── CLS
DIR A:
V3 C:
^Z
1 File(s) Copied
<설명1> COPY 명령을 사용하여 텍스트 파일 만드는 방법을 이용한다.
CON은 장치 파일명으로 여기서는 키보드를 지칭한다.키보드로 입력한 문자를 SAMPLE.BAT라는 파일명으로 복사.출력하라는 뜻이다.
입력한 배치 내용을 보면
화면을 깨끗이지우고(CLS), A드라이브의 파일목록을 보이라, 그리고 C 디스크에 바이러스 감염 여부를 점검.치료하라는 명령이다.
줄을 바꿀 때는 항상 엔터하면 된다. 끝낼 때는 언제나 Ctrl+Z 또는 F6키를 누르고 엔터하면 1개 파일이 복사되었다는 메시지가 나오면서 C루트에 SAMPLE.BAT란 파일이 1개 생긴다.
<실행> C:>SAMPLE <엔터>하면 배치파일 내용 순서데로 명령을 실행한다.
-----
작성 예②) C:>EDIT <엔터>
도스 편집기 화면이 뜬다. 이때 ESC키를 한번 눌러 메시지 상자를 제거하고 깨끗한 화면에다 첫째 줄부터 입력하되, 줄을 바꿀 때는 엔터한다.
CLS
DIR A:
V3 C:
끝내려고 저장글쇠(@F,S)를 누르면 파일이름을 써넣으라고 상자자 나온다. SAMPLE.BAT라고 입력하고 <엔터>하여 저장한 후, 에디트를 끝(@F, X)낸다.그러면 C루트 디렉토리에 SAMPLE.BAT 라는 배치파일이 생긴다.
<실행> C:>SAMPLE <엔터>하면 C루트에 있는 SAMPLE.BAT 파일이 실행된다.
******* 배치파일 내용에 파일스펙 경로명을 쓸 때 주의점.****
ⓐ 배치파일 내용 중에
C:GAMESUPERSUPER.EXE 라고 해놓으면
현재 도스 작업방을 바꾸지 말고 C:GAMESUPER 방에있는 SUPER.EXE를 실행하라는 뜻이기 때문에 경우에 따라서는 실행이 되지 않는다.
ⓑ 배치 내용을 아래와 같이 하면 틀림없이 실행하게 된다.
C:
CDGAMESUPER
SUPER
현재 도스작업방이 먼저 C드라이브로 바뀌고,절대경로명 CDGAMESUPER
디렉토리로 이동한 후에 SUPER.EXE 파일을 실행한다 ******
1.3.배치파일 명령어들
① 일반적인 도스명령를 그대로 사용한다.
CLS COPY DEL DIR DATE TIME PAYH PROMPT CHKDSK 등등.
② 배치에만 사용하는 전용 명령가 있다.
ECHO REM PAUSE CALL GOTO CHOICE IF FOR SHIFT
(메아리)(설명) (쉼) (부름) (가기) (선택) (조건)(순환) (옮김)
ⓐ REM
[베치파일 속에 달고 싶은 설명.주석]....설명이 화면에 나옴.
ⓑ PAUSE
배치파일 실행중 일시 멈추게함.
화면에 'Press any key to continue...'
(계속하려면 아무키나 누르세요)
배치실행을 중단하려면 Ctrl+C키를 누른다. 그러면 화면에
'Terminate batch job (Y/N)?'
(배치작업을 끝내겠읍니까?) Yes / No
ⓒ ECHO 명령
형식> ECHO 문자열
에코명령 다음에 오는 문자열을 화면에 나타낸다.
ECHO ON
이후부터 '명령어'라인을 화면에 보인다.(도스 초기값)
ECHO OFF
이후 실행되는 명령어 라인을 화면에 나타내지 않는다.
화면이 깨끗하고, 화면출력속도.가독성 증가한다.
'ECHO OFF'라는 그 자체까지 보이지 않게 하려면 @ 을 앞에 쓴
다.( @ECHO OFF )
ECHO
현재 ECHO ON/OFF 상태를 확인한다.
<예> C:>COPY CON EDIT2.bat
ECHO OFF
이후에 실행되는 명령어는 화면에 나타나지 않는다.
화면에 ECHO OFF 자체는 나타난다.
TB
태백한글을 메모리에 상주 띄우기.
각자 지원되는 다른 한글코드(HANME,HT,DKBY 등)를
실행하면 된다.
한글도스인 때는 HBIOS.COM을 실행한다.
PAUSE
잠시 중지. 엔터하면 다시 진행한다.
CLS
화면청소
ECHO 'This is Hangul Edit.'
'문자열'을 화면에 출력한다.
PAUSE
REM NOW,DOS EDIT IS HANGUL EDITOR.
REM 다음에 오는 설명은 화면에 나오지 않는다. 다만
사용자가 배치파일 내용을 볼 때 참고할 내용이다.
ECHO ON
이후에 실행되는 명령어는 화면에 나타남
EDIT
도스 에디터 화면이 나오면 한글로 문서를 작성.저장한
후 끝낸다.
@ECHO OFF
이후에 실행되는 명령어는 화면에 나타나지 않는다.
ECHO OFF자체도 나타나지않음.
TB/U
태백한글 메모리서 제거한다.
CLS
^Z
CTRL+Z 또는 F6를 누른다.
1 File(s) Copied
실습을 위하여 일부러 여러가지 명령 종류를 써 보았으며,한글로 설 명을 하느라고 줄이 떨어졌으나 각자 실습할 때는 영문글자 부분만 쓰고 엔터하여 줄울 바꾸고 줄간격을 붙여가며 쓴다.
<실행 예> C:>EDIT2 <엔터> 하면
위의 내용을 순서데로 실행하고 도스 문서편집기가 화면에 나타난다. 문서작성기를 끝내면 한글프로그램을 메모리에서 제거하고 도스로 나온다
1.4 배치파일 전용 명령에서
? 판단과 분기에 관한 명령 .... CALL, CHOICE, IF, GOTO
앞에서 공부한 배치파일의 경우는 입력된 명령어들의 순서데로 실행되었었지만, 판단과 분기의 명령들은 명령어의 실행의 흐름을 사용자가 임의로 변경,지정할 수있어 배치파일의 기능을 보다 강력하게 한다.
분기 명령..배치파일의 순차적 수행을 필요에 따라 변경할 때 사용하며
배치파일에 프로그램적 기능을 갖게하는 명령이다.
조건분기(Conditional Branching).......IF명령
무조건분기(Unconditional Branching)...GOTO명령
① CALL [배치파일 인자]
배치파일 실행 중 다른 배치파일을 도중에 호출하여 실행시키고 다시
원래 배치파일로 돌아오게 하는 명령이다.
<예> H1.BAT의 내용이 'DIR C: > A:MDIRLIST.TXT' ( C루트의 파일목
록을 A드라이브에 MDIRLIST.TXT 란 파일로 출력하라) 이라고 하자.
C:>COPY CON H2.BAT
CALL H1.BAT
TYPE A:MDIRLIST
^Z
<실행> C:>H2 엔터하면 H1.BAT란 배치파일을 불러(CALL) 실행하여 MDIRLIST.TXT 파일을 A드라이브에 만든 후, 다시 H2.BAT 파일로 돌아와서 A드라이브의 'MDIRLIST.TXT' 파일을 화면에 타이프해 보인다.
② IF 조건
주어진 조건에 따라 명령을 선별적으로 선택.실행케 하는 명령이다.
IF EXIST [파일이름] [명령]
찾는 파일이 존재하면 명령을 실행하라
IF NOT EXIT [파일이름] [명령]
찾는 파일이 없으면 명령을 실행하라
<예> IF EXIST *.BAK DEL *.BAK
BAK라는 백업파일이 있으면 모두 지워버리라.
IF [NOT] "문자열1" == "문자열2" [명령]
"문자열1"과 "문자열2"가 서로 일치 [불일치] 하면 명령을 실행하라. (양쪽 비교 문자열의 영문 대소문자를 구분한다)
==은 EQ로, !=은 같지 않다는 부호인데 NE로 대신할 수 있다.
문자열은 " " 으로 반드시 구분하고 부호와는 한 칸 띈다.
<예> C:>COPY CON TEST1.BAT
@ECHO OFF
IF "%1" == "A" ECHO TESTING A
IF NOT "%1" == "A" ECHO IT IS NOT EQUAL.
^z
<실행> C:>TEST1 A 엔터하면 화면에 TESTING A 라고 표시한다.
C:>TEST1 C 엔터하면 A와 같지 않으므로 IT IS NOT EQUAL 라고 표시한다.
IF [NOT] ERRORLEVEL [값] [명령]
IF명령 바로 앞에서 수행되었던 프로그램이 수행을 마치면서 남긴 종료코드(ExitCode)를 검사하여 지정 값보다 크면(작으면) 명령을 실행하라는 뜻이다.
종료코드를 발생하는 명령어(FORMAT,XCOPY,COPY,BACKUP,RESTORE 등 일
반 도스명령어들 메뉴얼 참조)들은 0~255 범위에서 종료코드(EXITCODE)
값을 가지는데
에를 들면 XCOPY명령에서 성공적 수행일 때는 0, 화일이 없을 때 1, CTRL+C로 중단하면 2, 초기화 오류발생 때는 4, 디스크 에러에는 5를 반환하는 식으로 정해저 있다.
예> C:>COPY CON XY.BAT
XCOPY %1 A:
IF NOT ERRORLEEVEL 0 ECHO COPY FAILED !
IF ERRORLEVEL 0 ECHO SUCCESSFULLY !
^Z
실행> C:>XY *.* 엔터하면 성공적 수행여부에 따라 'FAILED !' 또는
'SUCCESSFULLY !' 라는 메시지가 나온다.
③ GOTO [레이블이름]
레이블 이름이 있는 행으로 실행 순서를 옮긴다.
'레이블(Label)'은 8자이 내로, 레이블 앞에는 콜론(:)을 사용한다.
<예> 현재 디렉토리에 *.HWP 파일을 C:HNCDOC 디렉토리로 옮겨주는
배치파일을 만들어 보자.
C:>COPY CON HWPMV.BAT
@ECHO OFF
IF NOT EXIST *.HWP GOTO FIRST
MOVE /-Y *.HWP C:HNCDOC
ECHO HWPFILE MOVE DONE !
GOTO END
:FIRST
ECHO *.HWP FILE NOT FOUND !
:END
^Z
실행> C:>HWPMV 엔터하면 C루트 디렉토리에 있는 모든 HWP 파일을 C:HNCDOC 디렉토리로 옮기고 'HWP 파일을 모두 옮겼다'는 메시지를 화면에 보이고 END(끝) 레이블로 와서 도스상태로 빠저나 온다. 옮길 HWP 파일이 없으면 ' HWP 파일을 찾지 못했다'는 메시지가 나오고 끝(END) 낸다.
GOTO 문에서는 항상 END 레이블로 배치를 끝낸다.
배치 안에서 COPY,XCOPY,MOVE 명령은 /-Y 스위치를 써야 만이 목적지에 같은 이름의 파일이 있을 경우 덮어 쓸지여부를 확인하는 메시지를 출력한다.
④ 의사변수(Dummy Variables 가상의 변수)
바꿔 쓸 수 있는 인자(Replaceable Parameter)를 의사변수라 하며,
%0 ~ %9(10개)으로 표시한다.
형식> C:>명령어 파일1 파일2 " " " " " " 파일9
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9
작성예1> C:>COPY CON DIRALL.BAT
DIR %1
pause
DIR %2
pause
type %0
^Z
실행예> C:>DIRALL A: B: (엔터)
설명> 위 '실행 예'에서 명령어 DIRALL(.BAT)은 %0, A:은 %1, B:은 %2 에 해당하므로 '작성예1'의 내용 중 %1,%2,%0에 대입하여 명령을 수행한 결과가 화면에 나오게 된다. 즉 화면에는 'DIR A:'과, 'DIR B:'이 차례로 출력되고 멈췄다가 'DIRALL.BAT' 파일 내용이 출력된다.
작성예2> C:>COPY CON EDIT2.BAT
@ECHO OFF
CLS
TB .....tb라는 프로그램을 메모리에 설치
EDIT %1 ......%1은 '지정 파일'로 대체된다.
TB/U .......태백 한글을 메모리에서 제거
^Z
실행예> C:>EDIT2 SAMPLE.TXT (엔터)
%0 %1
설명> 위 '실행예'에서 명령어(EDIT2.BAT)는 %0, 파일1(SAMPLE.TXT)은 %1 에 해당하므로, '작성예2'의 배치파일 내용중 %1 대신에 SAMPLE.TXT라는 텍스트 파일이 대입된다.
화면은 한글을 읽고 쓸 수 있도록 태백한글을 메모리에 상주시킨다. 편집기는 SAMPLE.TXT 라는 파일을 읽어 화면에 띄워 수정.삽입 등 편집하고 저장할 수 있다. 편집을 끝내면 한글코드가 메모리에서 제거된다.
⑤ SHIFT
쉬프트는 옮김,변위를 의미하는 데 10개 이상의 대체 인자(Replaceable
Paramete)도 사용 가능하다. 대체인자를 한 자리씩 왼쪽으로 이동한다.
작성예> 지정한 문장(text) 파일들을 차례로 TYPE시키는 배치파일 예.
A:>COPY CON TELLME.BAT
@ECHO OFF
:BEGIN
IF NOT EXIST %1 GOTO END
TYPE %1
SHIFT
GOTO BEGIN
:END
ECHO 더이상 파일이 없습니다.
^Z
실행예> A:>TELLME AAA.TXT BBB.TXT CCC.TXT ......... 엔터
%0 %1 %2 %3 ........%15
설명> 위 '실행예'의 텍스트 파일명은 특정해야 하며 Wildcard문자(*,?)는 사용할 수 없다. 지정된 여러 파일들에 %1 변수가 차례로 SHIFT(변위)되면서 파일을 대입시켜 내용을 출력한다.
즉 AAA.TXT가 먼저 %1이 되고, 다음 BBB.TXT, 또 CCC.TXT, .....등이 %1에 대입된다. 계속 10개 이상의 변수도 지정할 수 있다.
지정된 파일이 모두 옮겨 대입되고 나면 배치파일이 끝나게 된다. 배치파일 내용 중 GOTO 명령에서 BEGIN 레이블로 가서 다시 시작하게하는 것을 LOOP(고리)라고 한다.
⑥ FOR
FOR 명령은 지정된 횟수 만큼 배치파일이 같은 명령을 계속 반복하게하는 명령, 즉 반복수행 (Looping) 명령이다.
형식) FOR %%변수 IN (셋트 파라미터) DO [명령어] %%변수
'(셋트 파라미터)'는 일련의 많은 갯수의 파일들을 말하고, '%%변수'는 SET에 명시된 각 파일에 순차적으로 설정되어 명령을 실행하는 대입변수이다.
셋트 파라미터에 와일드카드문자(*,?)를 사용할 수 있다.
작성예> 확장명이 BAT,DOC,TXT,CAP인 문장 파일 모두를 차례로 화면에 출력(TYPE)되게 배치파일을 만들어 보자.
C:> COPY CON TYPEALL.BAT
FOR %%Z IN (*.BAT *.DOC *.TXT *.CAP) DO TYPE %%Z
^Z
<실행> C:>TYPEALL C:MDIR*.BAT 엔터
(*.BAT, *.DOC, *.TXT, *.CAP 중에서 한 종류 파일만 지정한다.)
위 TYPEALL.BAT 파일을 실행할 때는 파일스펙(경로특정)이 있어야 한다.
2. 자동형 배치파일 (Aautoexec.bat)
일반배치파일 만들기와 동일하며 다만 이름만 AUTOEXEC.BAT로 한다.
컴퓨터를 구입할 때 이미 작성되어 있으므로 그 내용만 자기 필요에 따라 변경하면 될 것이다. 만약을 위해 원본 파일을 다른 곳에 백업해 놓고 필요시 다시 복사하면 좋을 것이다.
<작성예> C:>COPY CON AUTOEXEC.BAT
@ECHO OFF
CLS
SMARTDRV
LH V3RES
PROMPT $P$G
PATH=C:;C:DOS;C:MDIR;C:V&P
LH DOSKEY
M
^Z
1 FIle(s) Copied
① 컴퓨터가 부팅할 때 DOS 시스템 프로그램을 메모리에 상주시킨 후
곧 바로 자동실행 배치파일의 내용의 명령들을 실행한다.