Skip to content
컴퓨터잡담
2009.11.19 09:55

bat(배치)파일 문법

조회 수 12433 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄


bat(배치)파일 문법

일괄처리(Batch) 파일 #1

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:\GAME\SUPER\SUPER.EXE 라고 해놓으면

현재 도스 작업방을 바꾸지 말고 C:\GAME\SUPER\ 방에있는 SUPER.EXE를 실행하라는 뜻이기 때문에 경우에 따라서는 실행이 되지 않는다.

ⓑ 배치 내용을 아래와 같이 하면 틀림없이 실행하게 된다.
  C:
  CD\GAME\SUPER
  SUPER

현재 도스작업방이 먼저 C드라이브로 바뀌고,절대경로명 CD\GAME\SUPER
디렉토리로 이동한 후에 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 <엔터> 하면

위의 내용을 순서데로 실행하고 도스 문서편집기가 화면에 나타난다. 문서작성기를 끝내면 한글프로그램을 메모리에서 제거하고 도스로 나온다.  (계속)


제14장 배치파일 #2 (계속)

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 시스템 프로그램을 메모리에 상주시킨 후
  곧 바로 자동실행 배치파일의 내용의 명령들을 실행한다. 

배치화일로 파일 내에 문자쓰기 
http://blog.naver.com/mokomoji/130001367333

배치파일로 폴더 내의 여러 파일을 각각 압축하기 
http://blog.naver.com/mokomoji/130001367394

배치화일 수동 초이스 만들기  
http://blog.naver.com/mokomoji/130001367431

html 배치화일 특수문자 해결
http://blog.naver.com/mokomoji/130001367445

배치화일 명령어
http://blog.naver.com/mokomoji/130001367473

[본문스크랩] 네트워크 드라이브 자동 연결하기
http://blog.naver.com/mokomoji/130003167299

[본문스크랩] IP 자동 변경 스크립트 
http://blog.naver.com/mokomoji/130003167289

[본문스크랩] 반복적인 ip 변경은 Bat 파일을 이용하여 간단하게
http://blog.naver.com/mokomoji/130003167083

[펌] 윈도우 콘솔 명령어들 
http://blog.naver.com/mokomoji/130001368352

배치파일로 폴더 내의 여러 파일을 각각 압축하기
http://blog.naver.com/mokomoji/130001367394

폴더 분기 
http://blog.naver.com/mokomoji/120019472999

[펌] 날짜 및 시간 얻어오기 배치파일
http://blog.naver.com/mokomoji/120016354197

배치화일 오늘날짜 폴더 생성
http://blog.naver.com/mokomoji/120014798527

배치화일 bat 화일 자동처리 1
http://blog.naver.com/mokomoji/120014798176

로그인 후 댓글쓰기가 가능합니다.

?
  • ?
    디케 2009.11.19 10:00

    윈도우 콘솔 명령어들

    확장 명령어 세트와 기본 명령어 세트를 조합하면 윈도우 NT 셸 프로그래밍을 할 수 있다. 기본 명령어 세트는 도스에서 이미 익숙해 져 있는 명령어들일 것이므로, 확장 명령어 세트들만 여기서 설명하기로 하겠다. 윈도우 NT의 도스 명령어 코드들은 완벽한 32비트 코드로 이루어져 있기 때문에 이전 도스와는 완전히 다른 명령어지만, 피상적으로는 유사한 역할을 한다고 볼 수 있다. 확장 명령어들은 다음과 같다.
    ERASE, COLOR, CHDIR, MKDIR, PROMPT, PUSHD, POPD, SET, SETLOCAL, ENDLOCAL IF, FOR, CALL, SHIFT, GOTO, START, ASSOC, FTYPE 등이다. 각각에 대한 자세한 설명을 알고 싶으면 명령어 끝에 /? 옵션을 주면 된다.

    A.3 윈도우 NT 전용 명령어
    AT : 명령어와 프로그램의 실행을 스케쥴한다.
    ATTRIB : 파일 속성을 표시하거나 바꾼다.
    BREAK : 확장된 CTRL+C 검사를 설정하거나 지운다.
    CALL : 한 일괄 프로그램에서 다른 일괄 프로그램을 호출한다.
    CHCP : 활성화된 코드 페이지의 수를 표시하거나 설정한다. 
    CHDIR(CD) : 현재 디렉터리 이름을 보여주거나 바꾼다. 
    CHKDSK : 디스크를 검사하고 상태 보고를 표시한다.
    CLS : 화면을 지운다.
    CMD : Windows NT 명령 인터프리터의 새 인스턴스를 시작한다.
    COMP : 두 개 또는 여러 개의 파일을 비교한다.
    CONVERT : FAT 볼륨을NTFS로 변환한다. 현재 드라이브는 변환할 수 없다.
    COPY : 하나 또는 그 이상의 파일을 다른 위치로 복사한다.
    DATE : 날짜를 보여주거나 설정한다.
    DEL : 하나 또는 그 이상의 파일을 지운다.
    DIR : 디렉토리에 있는 파일과 하위 디렉토리 목록을 보여준다.
    DISKCOMP : 두 플로피 디스크의 내용을 비교한다.
    DISKCOPY : 플로피 디스크의 내용을 다른 플로피 디스크로 복사한다.
    DOSKEY : 명령 줄을 편집하고, Windows NT 명령을 다시 호출하고, 매크로를 만든다.
    ECHO : 메시지를 보여주거나, 명령어 반향을 켜거나 끈다.
    ENDLOCAL : 배치 파일에서 환경 변경의 지역화를 끝낸다.
    ERASE : 하나 또는 그 이상의 파일을 지운다.
    EXIT : CMD.EXE 프로그램 (명령 인터프리터)를 마친다.
    FC : 두 파일 또는 파일의 집합을 비교하고 둘 사이의 다른 점을 표시한다.
    FIND : 파일에서 텍스트 문자열을 찾는다.
    FINDSTR : 파일에서 문자열을 찾는다.
    FOR : 파일 집합에서 각 파일에 대해 지정된 명령을 실행한다.
    FORMAT : Windows NT에 사용할 디스크를 포맷한다.
    GOTO : Windows NT 명령 인터프리터가 배치 프로그램에서 이름표가 붙여진 줄로 이동하게 한다.
    GRAFTABL : Windows NT가 그래픽 모드에서 확장 문자 세트를 표시할 수 있게 한다.
    HELP : Windows NT 명령어에 관한 도움말을 제공한다.
    LABEL : 디스크의 볼륨 이름을 만들거나, 바꾸거나, 지운다.
    MKDIR(MD) : 디렉토리를 만든다.
    MODE : 시스템 디바이스를 구성한다.
    MORE : 출력을 한번에 한 화면씩 표시한다.
    MOVE : 하나 또는 그 이상의 파일을 한 디렉토리에서 다른 디렉토리로 옮긴다.
    NET ACCOUNTS : 도메인 서버의 로그온에 필요한 것이나 암호를 표시 또는 설정한다. 
    NET COMPUTERS : Windows NT 도메인 서버에 컴퓨터의 추가(도메인 서버에서만 가능)한다. 
    NET CONFIG : 서비스 동작 중에 제어가능한 서비스를 표시한다. 
    NET CONFIG SERVER : 서비스 동작 중에 서버 서비스의 설정을 변경하거나 표시한다. 
    NET CONFIG WORKSTATION : 워크스테이션 동작 중에 워크스테이션 서비스의 설정을 변경하거나 표시한다. 
    NET CONTIUNE : 일시 정지된 서비스의 재활성화한다. 
    NET FILE :서버에 있는 열린 공유 파일의 수와 각 파일의 락(존재할 경우)의 수를 표시한다. 이 명령은 개인 공유 파일을 닫을 수도 있고 락을 제거할 수도 있다. 
    NET GROUP : 글로벌 그룹의 추가, 표시 또는 수정(서버에서만 가능)한다. 
    NET HELP : 네트워크 명령과 도움말을 얻고자 하는 것의 제목 목록을 표시하거나 특정 명령이나 제목에 대한 도움말의 제공한다. 
    NET HELPMSG : 네트워크 에러 메시지에 대한 도움말 제공한다. 
    NET LOCALGROUP : 지역 그룹의 추가, 표시, 수정한다. 
    NET NAME : 워크스테이션에 메시지 이름을 추가, 삭제하거나 표시한다. 
    NET PAUSE : 서비스나 공유 프린터를 일시 멈춘다. 
    NET PRINT : 프린터 작업을 표시화거나 컨트롤한다. 
    NET SEND : 네트워크의 다른 컴퓨터에 메시지를 전달한다. 
    NET SESSION : 서버와 워크스테이션과의 세션을 보여주거나 연결 해제한다. 
    NET SHARE : 공유 리소스를 작성, 삭제 또는 표시한다. 
    NET START : 서비스를 시작하거나 시작된 서비스의 목록을 표시한다. 
    NET STATISTICS : Statistics Log를 표시한다. 
    NET STOP : 네트워크 서비스의 중단한다. 
    NET TIME :서버나 도메인의 시계가 컴퓨터의 시계와 일치하도록 하는 것이거나 서버나 도메인의 시간을 표시한다. 
    NET USE : 컴퓨터를 공유 리소스에 연결하거나 연결 해제하거나 컴퓨터 연결간의 정보를 본다. 
    NET USER : 사용자 계정을 추가하거나 수정, 또는 계정 정보를 본다. 
    NET VIEW : 서버의 목록이나 서버에 의해 공유된 리소스를 표시한다. 
    PATH : 실행 파일의 찾기 경로를 보여주거나 설정한다.
    PAUSE : 일괄 파일의 처리를 보류하고 메시지를 보여준다.
    POPD : PUSHD 명령으로 저장된 디렉토리로 바꾼다.
    PRINT : 텍스트 파일을 인쇄한다.
    PROMPT : Windows NT 명령 프롬프트를 바꾼다.
    PUSHD : 현재 디렉토리를 저장한 후 디렉토리를 바꾼다.
    RECOVER : 불량이거나 결함이 있는 디스크에서 읽을 수 있는 정보를 복구한다.
    REM : 배치 파일 또는 CONFIG.SYS에서 주석을 기록한다.
    RENAME(REN) : 파일 이름을 바꾼다.
    REPLACE :파일을 대체한다.
    RESTORE : BACKUP 명령으로 백업된 파일을 복원한다.
    RMDIR(RD) : 디렉토리를 지운다. 
    SET : Windows NT 환경 변수를 보여주거나, 설정하거나, 지운다,
    SETLOCAL : 일괄 파일에서 환경 변경의 지역화를 시작한다. 
    SHIFT : 일괄 파일에서 바꿀 수 있는 매개 변수의 위치를 바꾼다.
    SORT : 입력을 정렬한다. 
    START : 지정된 프로그램이나 명령을 별도의 창에서 시작한다. 
    SUBST : 경로를 드라이브 문자로 지정한다. 
    TIME : 시스템 시간을 보여주거나 설정한다. 
    TITLE : CMD.EXE 세션에 대한 창의 창 제목을 설정한다. 
    TREE : 드라이브 또는 경로의 디렉토리 구조를 그래픽으로 화면에 표시한다. 
    TYPE : 텍스트 파일의 내용을 보여준다.
    VER : Windows NT 버전을 보여준다. 
    VERIFY : 파일이 디스크에 올바로 쓰였는지 검증할지 여부를 지정한다. 
    VOL : 디스크 볼륨 이름과 일련 번호를 보여준다.
    XCOPY : 파일과 디렉토리 트리를 복사한다. 

    A.3 16비트 명령어 세트
    APPEND : 프로그램으로 하여금 지정된 디렉토리에 있는 데이터 파일을, 파일이 현재 디렉터리에 있는 것처럼 하여 열게 한다. 
    BACKUP : 다른 디스크로 파일들을 백업한다.
    DEBUG : 프로그램 테스트/편집 도구인 Debug를 실행한다.
    EDIT : 텍스트 파일을 새로 만들거나, 변경하려 할때 한글 MS-DOS 편집기를 사용한다.
    EDLIN : 줄 단위 텍스트 편집기인 EDLIN을 시작한다. 
    EXE2BIN : EXE(실행 파일)을 이진 형식으로 변환한다.
    EXPAND : 하나 이상의 압축 파일을 푼다.
    GRAPHICS : 그래픽을 인쇄할 수 있는 프로그램을 읽어들인다. 
    LOADFIX : 프로그램을 메모리의 처음 64K에 읽어들여서 실행한다. 
    LOADHIGH : 프로그램을 상위 메모리에 읽어들인다. 
    MEM : 시스템에서 사용된 메모리 및 사용 가능한 메모리 양을 표시한다. 
    QBasic : 한글 MS-DOS QBasic 프로그램 환경을 시작한다. 
    SETVER : MS-DOS가 프로그램에 보고하는 버전 번호를 설정한다. 
    SHARE : SHARE 프로그램을 시작한다.

  • ?
    2009.11.24 00:21

    [Batch File] 배치파일과 도스 명령어

     

     

     출처 : 게으르게(http://blog.naver.com/nancy2092/60029736473) : 튼튼한 배치파일 기초

     출처 : 게으르게(http://blog.naver.com/nancy2092/60029736325) : 배치파일을 좀더 잘 쓰려면

     

     

    배치 파일과 도스 명령어

     

    도스 상태에서 지원되는 기본적인 배치 명령어들에 대해서 살펴보도록 하자. 이들 기본 명령어만 잘익히고 활용해도 좀 더 편리한 환경을 만들 수 있을 것이다. 또한 이는 작업을 빠르게 하는 방법을 찾을 수 있는 최초의 길이 될 것이다. 


    도스의 배치 파일에서 주로 사용되는 명령들은 모두 합쳐 수십 개 이상이지만 주로 사용되는 명령들에 대해 살펴보는 것만으로 다른 명령에 대한 이 해를 높일 수 있다. 명령들은 단지 집을 짓는 도구에 지나지 않는다.각각의 도구를 잘 이용하여 훌륭한 집을 짓기 위해서는 모든 도구를 잘 갈아야 하며, 부러지지 않도록 튼튼하게 손을 봐야 할 것이다. 배치 프로그래밍도 마찬가지다. 하나씩 정확한 개념을 이해함으로써 커다란 집을 지어 나갈 수 있을 것이다. 자! 그럼 같이 집을 지어 봅시다. 
     
    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) Command

    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

     

    1) 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

    C:\> MYCOPY IAM.TXT BOSS.TXT

    <예제 2-2>IF EXIST 형식이 사용된 간단한 배치

     

    이 MYCOPY.BAT를 실행시키기 위해 도스 프롬프트에서 위와 같이 입력했는데 정상적으로 실행되지 않는다면 BOSS.TXT라는 파일이 디스크에 존재하지 않아 IF문의 조건문이 거짓이 되기 때문이다. 하지만 두 파일이 모두 존재하여 조건을 참으로 만든다면 IAM.TXT라는 파일을 BOSS.TXT에 정상적으로 복사할 것이다.

     

    2) IF NOT EXIST 형식
    IF NOT EXIST 조건은 원하는 파일이나 대입된 변수의 값이 존재하지 않아야 지정된 명령을 처리한다. 앞에서 다룬 IF EXIST문과 정 반대의 의미로 사용된다. 이 형식은 배치 파일 구성상 실행에 관계된 중요한 파일이 존재하지 않을 경우 지정된 행으로 이동하여 배치 프로그램의 실행을 중단하도록 하는데 많이 이용된다.

     

    IF NOT EXIST %1 ECHO %1 Does Not Exist in Your disk

     

    앞 예제 문장은 변수 %1이 존재하지 않아야만 조건값이 참이 되어 뒤에 따라오는 명령을 수행하게 된다. 이것은 NOT이라는 부정 조건이 추가되었기 때문에 존재하지 않아야만 참이 되는 것이다.

     

    3) IF String1==String2 형식
    이 조건은 문자열이나 문자 하나를 변수로 입력받으면 배치 파일 내에 미리 지정된 문자열과 비교하고 같으면 다음 명령을 처리하게 된다. 그리고 비교되는 두 문자열이 일치하지 않는다면 다음 행으로 건너뛰게 되는 구조이다. 예제로 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...?

    C:>QUESTION BOSS

    YOU ARE A BOSS...!

    <예제 2-3> If string문을 이용한 배치 파일

     

    그러나 여기서 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...?

     

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

     

    4) IF NOT String1==String2 형식
    변수로 주어지는 문자열이 같지 않아야만 조건 뒤에 오는 명령을 실행한다. 이 형식 역시 NOT라는 부정 조건자를 포함하고 있기 때문에 비교되는 두 변수가 일치하지 않아야만 참이 되어 연속되는 명령을 실행하게 되는것이다.

     

    ECHO OFF IF NOT "%1"=="%2" COPY %1 %2

    <예제 2-4> If NOT문을 이용한 배치 예제

     

    예제에서 알 수 있듯이 두 변수가 같지 않다면 뒤에 따라오는 COPY 명령을 수행한다. 그러나 두 변수가 같을 경우에는 거짓이 되어 계속되는 명령을 수행하지 않는다. IF String1==String2와 IF NOT String1==String2 문장은 서로 보완적으로 배치 파일에서 사용되어 특정 문자나 변수를 비교하는데 이용된다.

     

    5) IF ERRORLEVEL value 형식
    탈출 상태 코드(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

    ECHO FIXED DISK WILL NOT BE FORMATTED

    GOTO DONE

    :ERROR

    ECHO ERROR IN PROCESSING, FORMAT FAILED

    GOTO DONE

    :USER_CTRLC

    ECHO FORMAT FAILED DUE TO CTRL-C BY USER

    :DONE

    <예제 2-6> IF ERRORLEVEL 문을 이용한 배치 파일

     

    이 배치 파일로 포맷하던 중 디스크 에러가 나거나 컨트롤-C를 눌러 중지됐다면 에러 레벨 코드와 루프 탈출 상태 값을 비교하여 맞는 레이블로 이동한 다음에 적합한 에러 메시지를 보여주는 프로그램이다. 즉, 에러 레벨 처리 조건문은 값을 에러 레벨 코드와 비교하여 크거나 같으면 지정된 명령을 실행하게 된다. 

     

    6) IF NOT ERRORLEVEL value 형식
    이 조건은 "IF Errorlevel Value 명령 형식"과 반대로 생각하면 된다. 실제 에러 레벨 값과 지정된 값이 같지 않아야만 다음 명령을 처리한다.

     

    ECHO OFF

    FORMAT A: /S

    IF NOT ERRORLEVEL 3 GOTO END

    ECHO AN ERROR OCCURRED DURING FORMATING.

    :END

    ECHO END OF BATCH PROGRAM

    <예제 2-6> IF NOT ERRORLEVEL 문을 이용한 배치 파일

     

    위의 예제는 A 드라이브에서 디스켓을 포맷하던 중 CTRL+C를 눌러 에러가 발생하면, 에러 레벨 코드가 같아지기 때문에 AN ERROR OCCURRED DURING FORMATTING라는 에러 메시지를 표시하고 중단된다. 하지만 에러 레벨 코드 3번이 아닌 경우에는 값이 참이 되어 에러 메시지를 보여주지 않게 된다.

     

    2.1.5 FOR

    FOR문 역시 일종의 반복 조건문으로 주어진 조건을 만족할 때까지 도스 명령어를 실행한다.

     

    * 형식 : FOR %%변수명 IN (SET) DO Command

    앞의 형식만 보고 어떻게 적용해야 하는지 이해가 잘 안될 것이므로 보기를 보는 게 좋을 것이다. 위의 퍼센트 기호 두 개와 함께 쓰인 변수는 앞에서 다뤘던 숫자 변수와 달리 '이름을 가진 변수' (NAMED VARIABLE)이다. 이 때문에 숫자 변수와 구분하기 위해 이름 변수는 앞에 %(퍼센트 기호)를 두 개 붙여 준다.

    그리고 FOR 다음의 변수명으로는 한 문자로된 알파벳만을 사용할 수 있다. 또한 괄호 안의 (SET)은 범위를 알려주는 것으로 *(ASTERISK)나 파일들의 이름을 스페이스(SPACE)나 COMMA(,)로 구분하여 적어 줘도 된다. 이와 같이 특정 조건을 주기 위한 괄호 안의 마스크(MASK)로는 다음과 같이 적용할 수 있다. 

     

    (*.*) (BOOK1.BAT BOOK2.SYS BOOK3.COM) (*.BAT)...
    FOR %%I IN (*.BAT) DO TYPE %%I

     

    위의 문장은 현재 디렉토리의 모든 *.BAT 파일 중에서 변수로 대입되는 파일을 찾아 TYPE 명령으로 보여줄 것이다. 그런데 이 문장을 도스 프롬프트의 명령행 라인에서 직접 사용하기 위해서는 변수명 앞에 %(퍼센트 기호)를 하나만 써야 한다

     

    FOR %변수명 IN(set) DO command [command-parameters]

    ♣ 변수명 사용시 주의 사항

    변수명에 사용되는 문자는 앞에서 알파벳 문자 하나만을 사용할 수 있다고 했다. 그것은 배치 프로그램에서 사용되는 %0∼%9까지의 숫자 변수들과 혼란을 피하기 위해서이다. 그리고 복잡한 배치 파일에서처럼 다른 대체 변수와 구분할 필요가 있는데 이때 여러 개의 입력 값을 위한 다른 변수 명을 사용할 수 있다. 그러나 한 줄의 같은 명령행에서 포함 관계에 있는 여러개의 FOR문을 사용할 수는 없다. 
    또한 FOR문에는 도스에서 사용되는 명령 스위치나 파이프, 리디렉션 등을 지원한다. 

    FOR %f in(*.doc *.txt) do type %f > pm

     

    2.1.6 GOTO

    조건에서 만족하면 지정된 레이블로 제어를 옮겨 주는 기능을 한다. 레이블명은 :(COLON)을 앞세우고 적는다. 이 GOTO 명령은 배치 프로그램 안에서만 사용되는 명령으로 도스 명령어 처리기에게 지정된 레이블명이 있는 행으로 제어권을 이동하게 한다. 일단 제어권이 이동한 다음에는 연속해서 그 다음 행의 명령들을 처리한다.

    * 형식 : GOTO label

     

    GOTO 명령에서 유효한 레이블명은 공백(SPACE)이나 ;(세미콜론), =(EQUAL)과 같은 기호를 포함하지 않아야 하며, 8자를 넘지 않는 게 좋다. 이는 GOTO 명령이 레이블명에 사용된 문자 중 첫 8자까지 만을 인식하기 때문이다. 마치 도스에서 파일명이 8자인 것과 같은 구조로 인식하기 때문이다. 그것을 증명하기 위해 "THIS_IS_1"과 "THIS_IS_2"란 레이블명이 배치파일 안에 존재한다고 할 때 GOTO문이 지정한 이들 레이블명은 "THIS_IS_" 와 같이 앞에서 8자까지 만을 인식하게 된다. 따라서 두 개의 레이블명은 같은 레이블명으로 인식하게 되어 먼저 나타난 쪽으로 제어권을 이동하게 된다. 이런 점은 GOTO문 사용시 주의해야 할 것이다. 
    다음 예제는 IF NOT ERRORLEVEL문과 함께 쓰여 디스크 포맷시 발생한 에러 레벨 값이 1이 아니면 GOTO문에 의해 END레이블로 제어권이 이동하게 되는 구조이다.

     

    ECHO OFF

    FORMAT A: /S

    IF NOT ERRORLEVEL 3 GOTO END

    ECHO AN ERROR OCCURRED DURING FORMATING.

    :END

    ECHO SUCESSFULY FORMATTED THE DISK IN DRIVE A

    <예제 2-7> GOTO 문을 이용한 배치 파일

     

    2.1.7 CALL

    배치 파일 내에서 명령의 중단이나 정지없이 또 다른 배치 파일을 불러 실행시키도록 하는 명령이다.

     

    * 형식 : CALL [drive:][path] filename [batch-parameters]

     

    문법 구조에서 알 수 있듯이 CALL 명령 다음에 현재 배치 파일 내에서 불러 실행할 다른 배치 파일의 실행 경로와 파일명을 적어 주면 된다. 또한 배치 파라메터에는 배치 파일과 함께 실행할 스위치나 파일명, %0∼%9까지의 대체 변수, 환경 변수 등과 같은 것들이 올 수 있다. 그러나 다른 명령과는 달리 파이프 기호나 리디렉션 기호를 CALL 명령과 함께 사용할 수 없다.

    또한 배치 프로그램 안에서 반복해서 자신을 불러들일 수 있는 RECURSIVE 호출이 가능하지만 이 경우 탈출 명령을 만들어 두지 않으면 계속해서 반복 루프에 걸리게 된다. 이 때도 사용자가 강제로 배치 파일의 실행을 중지하기 위해서는 CTRL+C를 눌러 프로그램 실행을 그만두게 해야 한다. CALL 명령은 배치 파일 중간에 사용되어 다른 배치 파일을 불러들여 실행하고 다시 제어권을 CALL문이 사용된 배치 프로그램으로 넘기게 된다. 그러나 배치 파일의 마지막 줄에 다른 배치 파일을 실행하기 위해서는 CALL문을 사용하지 않아도 된다. 왜냐하면 제어권을 원래의 호출 프로그램으로 되돌릴 필요가 없기 때문이다. 
    다음의 예를 비교해 보자. 외부에 CHECK.BAT이란 파일을 불러 실행하려는 경우에 마지막 행에서 어떻게 차이가 나는지 알아볼 수 있는 예이다. 

    다음 예제는 IF NOT ERRORLEVEL문과 함께 쓰여 디스크 포맷시 발생한 에러 레벨 값이 1이 아니면 GOTO문에 의해 END레이블로 제어권이 이동하게 되는 구조이다.

     

    REM 이 파일은 마지막 행에 CALL을 사용한 예이다.

    DIR *.* > PRN CALL CHECK.BAT

    REM 이 파일은 마지막 행에 직접 배치 파일을 적어 준 예

    DIR *.* > PRN CHECK.BAT

    TIME

    <예제 2-9> CALL 문을 이용한 배치 파일

     

    CALL문의 사용 없이 또다른 배치 파일을 불러서 처리하면 원래의 프로그램으로 제어권이 되돌아오지 않기 때문에 원래 프로그램에 있는 호출된 배치 파일명 뒤의 명령은 실행되지 않는다. 위의 예에서 직접 배치 파일명을 적어 준 경우는 다음에 따라오는 TIME이라는 명령을 실행하지 않고 프로그램이 종료된다. 그 이유는 앞에서 설명했듯이 제어권이 되돌아오지 않고 종료되기 때문이다.

    CALL 명령과 비슷하게 작용하는 명령이 또 하나 있다. 바로 COMMAND /C 명령인데, 이것은 DOS 3.3 이하 버전을 사용할 경우 또 다른 배치 파일을 호출하기 위해 이용된다.

     

    2.1.8 SHIFT

    배치 파일의 변수들을 왼쪽으로 하나씩 이동시킨다.

    다음과 같이 SHIFTIT.BAT란 파일을 만들자.

     

    ECHO OFF

    REM 이 배치 파일은 SHIFT.BAT이며, SHIFT 명령의 이해를 돕기 위한 것이다

    :REPEAT

    ECHO %0

    SHIFT

    IF NOT "%0"=="" GOTO REPEAT

    C:>SHIFT ONE TWO THREE

    SHIFTIT

    ONE

    TWO

    THREE

    <예제 2-10> SHIFT 문을 이용한 배치 파일

     

    결과는 위의 예에서와 같이 SHIFT, ONE, TWO, THREE가 순차적으로 한 줄씩 기록되는 결과가 나올 것이다. SHIFT 명령은 %0 부터 %9 까지 10개의 변수에 대응되는 값들을 하나씩 왼쪽으로 이동시켜 대입시키게 된다. 하지만 프로그래밍에서 사용되는 것처럼 오른쪽으로 이동되는 SHIFT 연산자는 제공되지 않는다.

     

    2.1.9 CHOICE

    도스 6.0부터 포함된 명령으로 배치 파일을 사용자와 대화식으로 구성하기 위한 명령이다. 다시 말해서 CHOICE는 지정된 키 중에서 사용자가 원하는 키를 누를 때까지 정지 상태의 메시지 프롬프트를 제공한다. 사용 형식은 다음과 같으며, 각 옵션과 스위치의 설명을 보도록 하자.

     

    * 형식 : CHOICE [/C[:]keys] [/N] [/S] [/T[:]char, sec(nn)] [test]

     

    ♣ [파라메터와 스위치]

    ▶ text

    사용자가 선택키를 고를 때까지 화면에 나타내고 싶은 메시지를 적어 줄수 있다. 그러나 프롬프트 앞에 단지 문자열의 일부분으로써 스위치 구분자인 (/)를 사용하려 한다면, 인용 부호(Quatation)를 이용해 표시해 줘야 한다.

     

    ▶ /C[:]keys

    프롬프트에 할당된 키를 명시한다. 각 키의 정의는 대괄호([,]) 안에 정의되며 콤마(,)에 의해 구분되고 물음표(?)가 뒤따라오게 된다. 그러나 만약 /c 스위치가 정의되지 않으면 디폴트 값인 YN(Yes, No)이 사용된다. 또한 구분자인 콜론의 사용은 선택적이다.

     

    ▶ /N

    CHOICE 명령에서 프롬프트를 표시하지 않는다. 그러나 프롬프트 앞에 나타나는 text에서 지정한 메시지는 나타난다. 또 /N 스위치를 사용했다. 하더라도 /C 스위치에 지정된 키의 사용은 유효하다. 다만 화면에 표시하지 않는 것뿐이므로 선택키가 안 보인다고 당황할 필요는 없다.

     

    ▶ /S

    이 스위치는 선택키의 대문자와 소문자 입력을 구분하는 동작을 한다.

     

    ▶ /T[:]char,sec(nn)

    이 스위치는 char에 지정된 디폴트 선택키를 sec(초단위)에 지정된 시간만큼 지연시킨 후에 실팽되도록 한다. char에 사용되는 문자는 /C 스위치에서 지정한 선택문자들에 포함된 것이어야 하며, 지연 시간의 범위는 0부터 99초까지의 초단위 시간을 사용할 수 있다. 
    CHOICE 명령이 ERRORLEVEL 변수는 /C 스위치에 처음 할당되는 키가 /T옵션에서 디폴트 키로 정해졌을 때, 이 키가 눌려지지 않고 시간이 지나 들어온 값이면 1, 두 번째 키는 2, 세 번째는 3과 같이 계속해서 주어지며 이들 이외의 키가 눌려진 경우라면 경고음을 내보낸다. 그리고 각 스위치나 옵션에서 어떤 문제가 발생해서 에러가 발견되면 ERRORLEVEL값이 255에 설정되며, 사용자가 CTRL+BREAK나 CTRL+C를 눌러 중지한 경우라면 CHOICE 명령은 에러 레벨 값을 0에 설정하게 된다. 이러한 에러 레벨 변수 값을 배치 프로그램에서 사용할 경우에는 큰 값에서 작은 값으로 비교하는 내림차순으로 사용해야 한다. 예제를 한번 보도록 하자.

     

    choice /c:ync YES, NO, or Continue
    Yes, No, or Continue [Y,N,C]?

     

    이 명령은 Y,N,C와 같은 세 가지 선택키를 보여주며 Yes, No, or Continue와 같은 메시지를 앞에 보여주게 된다.

    또 다른 예제인 /T 스위치를 사용한 예를 보도록 하자. 

    choice /c:ync /t:n,5

     

    화면에 나타난 메시지 없이 다음의 [Y,N,C]? 라는 선택키만을 보이고 5초동안 기다릴 것이다. 그러나 5초 후에 사용자가 누른 키가 없다면 CHOICE는 디폴트로 설정된 N키를 선택하고 두 번째 키에 의한 에러 레벨 값 2를 내보내게 되는 것이다. 
    이와 같은 에러 레벨을 이용한 배치 파일을 구성하기 위해서는 choice는 아주 다양한 배치의 실행을 돕는다. 만약 에러 레벨의 검사후 원치 않는 값이면 프로그램을 빠져나오도록 구성할 수도 있다. 도스의 외부 명령어인 chkdsk를 실행하기 위해 다음과 같이 choice 명령을 구성할 수 있을 것이다.

     

    \choice /ty,5 chkdsk for your drive

    if errorlevel 2 goto SkipCheck

    CHKDSK c:

    :SkipCheck

    <예제 2-13> choice문을 이용한 배치 파일

     

    디폴트 선택키로 y, n이 주어져 있다. /T스위치에서 5초 안에 키가 안 눌려지면 Y키를 CHOICE에 전달하고 C 드라이브에 대한 CHKDSK를 실행하게 된다. 그러나 5초 이내에 디폴트 키가 아닌 N키가 눌려지면 에러 레벨2가 전달되어 SkipCheck라는 레이블로 이동하게 되어 CHKDSK C:의 실행이 건너띄게 된다. 
    실제로 배치 프로그래밍에서 CHOICE 명령과 같이 사용자의 키 입력이나 선택를 요구하는 부분을 필요로 하는 경우가 많이 있다. 이런 대화식 선택 화면을 구성하기 위해 CHOICE는 매우 유용한 명령으로 이용될 것이다. 

     

     

     

  • ?
    2009.11.24 00:22

    [Batch File] 배치파일과 도스 명령어

     

     

     출처 : 게으르게(http://blog.naver.com/nancy2092/60029736473) : 튼튼한 배치파일 기초

     출처 : 게으르게(http://blog.naver.com/nancy2092/60029736325) : 배치파일을 좀더 잘 쓰려면

     

     

    배치 파일과 도스 명령어

     

    도스 상태에서 지원되는 기본적인 배치 명령어들에 대해서 살펴보도록 하자. 이들 기본 명령어만 잘익히고 활용해도 좀 더 편리한 환경을 만들 수 있을 것이다. 또한 이는 작업을 빠르게 하는 방법을 찾을 수 있는 최초의 길이 될 것이다. 


    도스의 배치 파일에서 주로 사용되는 명령들은 모두 합쳐 수십 개 이상이지만 주로 사용되는 명령들에 대해 살펴보는 것만으로 다른 명령에 대한 이 해를 높일 수 있다. 명령들은 단지 집을 짓는 도구에 지나지 않는다.각각의 도구를 잘 이용하여 훌륭한 집을 짓기 위해서는 모든 도구를 잘 갈아야 하며, 부러지지 않도록 튼튼하게 손을 봐야 할 것이다. 배치 프로그래밍도 마찬가지다. 하나씩 정확한 개념을 이해함으로써 커다란 집을 지어 나갈 수 있을 것이다. 자! 그럼 같이 집을 지어 봅시다. 
     
    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) Command

    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

     

    1) 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

    C:\> MYCOPY IAM.TXT BOSS.TXT

    <예제 2-2>IF EXIST 형식이 사용된 간단한 배치

     

    이 MYCOPY.BAT를 실행시키기 위해 도스 프롬프트에서 위와 같이 입력했는데 정상적으로 실행되지 않는다면 BOSS.TXT라는 파일이 디스크에 존재하지 않아 IF문의 조건문이 거짓이 되기 때문이다. 하지만 두 파일이 모두 존재하여 조건을 참으로 만든다면 IAM.TXT라는 파일을 BOSS.TXT에 정상적으로 복사할 것이다.

     

    2) IF NOT EXIST 형식
    IF NOT EXIST 조건은 원하는 파일이나 대입된 변수의 값이 존재하지 않아야 지정된 명령을 처리한다. 앞에서 다룬 IF EXIST문과 정 반대의 의미로 사용된다. 이 형식은 배치 파일 구성상 실행에 관계된 중요한 파일이 존재하지 않을 경우 지정된 행으로 이동하여 배치 프로그램의 실행을 중단하도록 하는데 많이 이용된다.

     

    IF NOT EXIST %1 ECHO %1 Does Not Exist in Your disk

     

    앞 예제 문장은 변수 %1이 존재하지 않아야만 조건값이 참이 되어 뒤에 따라오는 명령을 수행하게 된다. 이것은 NOT이라는 부정 조건이 추가되었기 때문에 존재하지 않아야만 참이 되는 것이다.

     

    3) IF String1==String2 형식
    이 조건은 문자열이나 문자 하나를 변수로 입력받으면 배치 파일 내에 미리 지정된 문자열과 비교하고 같으면 다음 명령을 처리하게 된다. 그리고 비교되는 두 문자열이 일치하지 않는다면 다음 행으로 건너뛰게 되는 구조이다. 예제로 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...?

    C:>QUESTION BOSS

    YOU ARE A BOSS...!

    <예제 2-3> If string문을 이용한 배치 파일

     

    그러나 여기서 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...?

     

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

     

    4) IF NOT String1==String2 형식
    변수로 주어지는 문자열이 같지 않아야만 조건 뒤에 오는 명령을 실행한다. 이 형식 역시 NOT라는 부정 조건자를 포함하고 있기 때문에 비교되는 두 변수가 일치하지 않아야만 참이 되어 연속되는 명령을 실행하게 되는것이다.

     

    ECHO OFF IF NOT "%1"=="%2" COPY %1 %2

    <예제 2-4> If NOT문을 이용한 배치 예제

     

    예제에서 알 수 있듯이 두 변수가 같지 않다면 뒤에 따라오는 COPY 명령을 수행한다. 그러나 두 변수가 같을 경우에는 거짓이 되어 계속되는 명령을 수행하지 않는다. IF String1==String2와 IF NOT String1==String2 문장은 서로 보완적으로 배치 파일에서 사용되어 특정 문자나 변수를 비교하는데 이용된다.

     

    5) IF ERRORLEVEL value 형식
    탈출 상태 코드(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

    ECHO FIXED DISK WILL NOT BE FORMATTED

    GOTO DONE

    :ERROR

    ECHO ERROR IN PROCESSING, FORMAT FAILED

    GOTO DONE

    :USER_CTRLC

    ECHO FORMAT FAILED DUE TO CTRL-C BY USER

    :DONE

    <예제 2-6> IF ERRORLEVEL 문을 이용한 배치 파일

     

    이 배치 파일로 포맷하던 중 디스크 에러가 나거나 컨트롤-C를 눌러 중지됐다면 에러 레벨 코드와 루프 탈출 상태 값을 비교하여 맞는 레이블로 이동한 다음에 적합한 에러 메시지를 보여주는 프로그램이다. 즉, 에러 레벨 처리 조건문은 값을 에러 레벨 코드와 비교하여 크거나 같으면 지정된 명령을 실행하게 된다. 

     

    6) IF NOT ERRORLEVEL value 형식
    이 조건은 "IF Errorlevel Value 명령 형식"과 반대로 생각하면 된다. 실제 에러 레벨 값과 지정된 값이 같지 않아야만 다음 명령을 처리한다.

     

    ECHO OFF

    FORMAT A: /S

    IF NOT ERRORLEVEL 3 GOTO END

    ECHO AN ERROR OCCURRED DURING FORMATING.

    :END

    ECHO END OF BATCH PROGRAM

    <예제 2-6> IF NOT ERRORLEVEL 문을 이용한 배치 파일

     

    위의 예제는 A 드라이브에서 디스켓을 포맷하던 중 CTRL+C를 눌러 에러가 발생하면, 에러 레벨 코드가 같아지기 때문에 AN ERROR OCCURRED DURING FORMATTING라는 에러 메시지를 표시하고 중단된다. 하지만 에러 레벨 코드 3번이 아닌 경우에는 값이 참이 되어 에러 메시지를 보여주지 않게 된다.

     

    2.1.5 FOR

    FOR문 역시 일종의 반복 조건문으로 주어진 조건을 만족할 때까지 도스 명령어를 실행한다.

     

    * 형식 : FOR %%변수명 IN (SET) DO Command

    앞의 형식만 보고 어떻게 적용해야 하는지 이해가 잘 안될 것이므로 보기를 보는 게 좋을 것이다. 위의 퍼센트 기호 두 개와 함께 쓰인 변수는 앞에서 다뤘던 숫자 변수와 달리 '이름을 가진 변수' (NAMED VARIABLE)이다. 이 때문에 숫자 변수와 구분하기 위해 이름 변수는 앞에 %(퍼센트 기호)를 두 개 붙여 준다.

    그리고 FOR 다음의 변수명으로는 한 문자로된 알파벳만을 사용할 수 있다. 또한 괄호 안의 (SET)은 범위를 알려주는 것으로 *(ASTERISK)나 파일들의 이름을 스페이스(SPACE)나 COMMA(,)로 구분하여 적어 줘도 된다. 이와 같이 특정 조건을 주기 위한 괄호 안의 마스크(MASK)로는 다음과 같이 적용할 수 있다. 

     

    (*.*) (BOOK1.BAT BOOK2.SYS BOOK3.COM) (*.BAT)...
    FOR %%I IN (*.BAT) DO TYPE %%I

     

    위의 문장은 현재 디렉토리의 모든 *.BAT 파일 중에서 변수로 대입되는 파일을 찾아 TYPE 명령으로 보여줄 것이다. 그런데 이 문장을 도스 프롬프트의 명령행 라인에서 직접 사용하기 위해서는 변수명 앞에 %(퍼센트 기호)를 하나만 써야 한다

     

    FOR %변수명 IN(set) DO command [command-parameters]

    ♣ 변수명 사용시 주의 사항

    변수명에 사용되는 문자는 앞에서 알파벳 문자 하나만을 사용할 수 있다고 했다. 그것은 배치 프로그램에서 사용되는 %0∼%9까지의 숫자 변수들과 혼란을 피하기 위해서이다. 그리고 복잡한 배치 파일에서처럼 다른 대체 변수와 구분할 필요가 있는데 이때 여러 개의 입력 값을 위한 다른 변수 명을 사용할 수 있다. 그러나 한 줄의 같은 명령행에서 포함 관계에 있는 여러개의 FOR문을 사용할 수는 없다. 
    또한 FOR문에는 도스에서 사용되는 명령 스위치나 파이프, 리디렉션 등을 지원한다. 

    FOR %f in(*.doc *.txt) do type %f > pm

     

    2.1.6 GOTO

    조건에서 만족하면 지정된 레이블로 제어를 옮겨 주는 기능을 한다. 레이블명은 :(COLON)을 앞세우고 적는다. 이 GOTO 명령은 배치 프로그램 안에서만 사용되는 명령으로 도스 명령어 처리기에게 지정된 레이블명이 있는 행으로 제어권을 이동하게 한다. 일단 제어권이 이동한 다음에는 연속해서 그 다음 행의 명령들을 처리한다.

    * 형식 : GOTO label

     

    GOTO 명령에서 유효한 레이블명은 공백(SPACE)이나 ;(세미콜론), =(EQUAL)과 같은 기호를 포함하지 않아야 하며, 8자를 넘지 않는 게 좋다. 이는 GOTO 명령이 레이블명에 사용된 문자 중 첫 8자까지 만을 인식하기 때문이다. 마치 도스에서 파일명이 8자인 것과 같은 구조로 인식하기 때문이다. 그것을 증명하기 위해 "THIS_IS_1"과 "THIS_IS_2"란 레이블명이 배치파일 안에 존재한다고 할 때 GOTO문이 지정한 이들 레이블명은 "THIS_IS_" 와 같이 앞에서 8자까지 만을 인식하게 된다. 따라서 두 개의 레이블명은 같은 레이블명으로 인식하게 되어 먼저 나타난 쪽으로 제어권을 이동하게 된다. 이런 점은 GOTO문 사용시 주의해야 할 것이다. 
    다음 예제는 IF NOT ERRORLEVEL문과 함께 쓰여 디스크 포맷시 발생한 에러 레벨 값이 1이 아니면 GOTO문에 의해 END레이블로 제어권이 이동하게 되는 구조이다.

     

    ECHO OFF

    FORMAT A: /S

    IF NOT ERRORLEVEL 3 GOTO END

    ECHO AN ERROR OCCURRED DURING FORMATING.

    :END

    ECHO SUCESSFULY FORMATTED THE DISK IN DRIVE A

    <예제 2-7> GOTO 문을 이용한 배치 파일

     

    2.1.7 CALL

    배치 파일 내에서 명령의 중단이나 정지없이 또 다른 배치 파일을 불러 실행시키도록 하는 명령이다.

     

    * 형식 : CALL [drive:][path] filename [batch-parameters]

     

    문법 구조에서 알 수 있듯이 CALL 명령 다음에 현재 배치 파일 내에서 불러 실행할 다른 배치 파일의 실행 경로와 파일명을 적어 주면 된다. 또한 배치 파라메터에는 배치 파일과 함께 실행할 스위치나 파일명, %0∼%9까지의 대체 변수, 환경 변수 등과 같은 것들이 올 수 있다. 그러나 다른 명령과는 달리 파이프 기호나 리디렉션 기호를 CALL 명령과 함께 사용할 수 없다.

    또한 배치 프로그램 안에서 반복해서 자신을 불러들일 수 있는 RECURSIVE 호출이 가능하지만 이 경우 탈출 명령을 만들어 두지 않으면 계속해서 반복 루프에 걸리게 된다. 이 때도 사용자가 강제로 배치 파일의 실행을 중지하기 위해서는 CTRL+C를 눌러 프로그램 실행을 그만두게 해야 한다. CALL 명령은 배치 파일 중간에 사용되어 다른 배치 파일을 불러들여 실행하고 다시 제어권을 CALL문이 사용된 배치 프로그램으로 넘기게 된다. 그러나 배치 파일의 마지막 줄에 다른 배치 파일을 실행하기 위해서는 CALL문을 사용하지 않아도 된다. 왜냐하면 제어권을 원래의 호출 프로그램으로 되돌릴 필요가 없기 때문이다. 
    다음의 예를 비교해 보자. 외부에 CHECK.BAT이란 파일을 불러 실행하려는 경우에 마지막 행에서 어떻게 차이가 나는지 알아볼 수 있는 예이다. 

    다음 예제는 IF NOT ERRORLEVEL문과 함께 쓰여 디스크 포맷시 발생한 에러 레벨 값이 1이 아니면 GOTO문에 의해 END레이블로 제어권이 이동하게 되는 구조이다.

     

    REM 이 파일은 마지막 행에 CALL을 사용한 예이다.

    DIR *.* > PRN CALL CHECK.BAT

    REM 이 파일은 마지막 행에 직접 배치 파일을 적어 준 예

    DIR *.* > PRN CHECK.BAT

    TIME

    <예제 2-9> CALL 문을 이용한 배치 파일

     

    CALL문의 사용 없이 또다른 배치 파일을 불러서 처리하면 원래의 프로그램으로 제어권이 되돌아오지 않기 때문에 원래 프로그램에 있는 호출된 배치 파일명 뒤의 명령은 실행되지 않는다. 위의 예에서 직접 배치 파일명을 적어 준 경우는 다음에 따라오는 TIME이라는 명령을 실행하지 않고 프로그램이 종료된다. 그 이유는 앞에서 설명했듯이 제어권이 되돌아오지 않고 종료되기 때문이다.

    CALL 명령과 비슷하게 작용하는 명령이 또 하나 있다. 바로 COMMAND /C 명령인데, 이것은 DOS 3.3 이하 버전을 사용할 경우 또 다른 배치 파일을 호출하기 위해 이용된다.

     

    2.1.8 SHIFT

    배치 파일의 변수들을 왼쪽으로 하나씩 이동시킨다.

    다음과 같이 SHIFTIT.BAT란 파일을 만들자.

     

    ECHO OFF

    REM 이 배치 파일은 SHIFT.BAT이며, SHIFT 명령의 이해를 돕기 위한 것이다

    :REPEAT

    ECHO %0

    SHIFT

    IF NOT "%0"=="" GOTO REPEAT

    C:>SHIFT ONE TWO THREE

    SHIFTIT

    ONE

    TWO

    THREE

    <예제 2-10> SHIFT 문을 이용한 배치 파일

     

    결과는 위의 예에서와 같이 SHIFT, ONE, TWO, THREE가 순차적으로 한 줄씩 기록되는 결과가 나올 것이다. SHIFT 명령은 %0 부터 %9 까지 10개의 변수에 대응되는 값들을 하나씩 왼쪽으로 이동시켜 대입시키게 된다. 하지만 프로그래밍에서 사용되는 것처럼 오른쪽으로 이동되는 SHIFT 연산자는 제공되지 않는다.

     

    2.1.9 CHOICE

    도스 6.0부터 포함된 명령으로 배치 파일을 사용자와 대화식으로 구성하기 위한 명령이다. 다시 말해서 CHOICE는 지정된 키 중에서 사용자가 원하는 키를 누를 때까지 정지 상태의 메시지 프롬프트를 제공한다. 사용 형식은 다음과 같으며, 각 옵션과 스위치의 설명을 보도록 하자.

     

    * 형식 : CHOICE [/C[:]keys] [/N] [/S] [/T[:]char, sec(nn)] [test]

     

    ♣ [파라메터와 스위치]

    ▶ text

    사용자가 선택키를 고를 때까지 화면에 나타내고 싶은 메시지를 적어 줄수 있다. 그러나 프롬프트 앞에 단지 문자열의 일부분으로써 스위치 구분자인 (/)를 사용하려 한다면, 인용 부호(Quatation)를 이용해 표시해 줘야 한다.

     

    ▶ /C[:]keys

    프롬프트에 할당된 키를 명시한다. 각 키의 정의는 대괄호([,]) 안에 정의되며 콤마(,)에 의해 구분되고 물음표(?)가 뒤따라오게 된다. 그러나 만약 /c 스위치가 정의되지 않으면 디폴트 값인 YN(Yes, No)이 사용된다. 또한 구분자인 콜론의 사용은 선택적이다.

     

    ▶ /N

    CHOICE 명령에서 프롬프트를 표시하지 않는다. 그러나 프롬프트 앞에 나타나는 text에서 지정한 메시지는 나타난다. 또 /N 스위치를 사용했다. 하더라도 /C 스위치에 지정된 키의 사용은 유효하다. 다만 화면에 표시하지 않는 것뿐이므로 선택키가 안 보인다고 당황할 필요는 없다.

     

    ▶ /S

    이 스위치는 선택키의 대문자와 소문자 입력을 구분하는 동작을 한다.

     

    ▶ /T[:]char,sec(nn)

    이 스위치는 char에 지정된 디폴트 선택키를 sec(초단위)에 지정된 시간만큼 지연시킨 후에 실팽되도록 한다. char에 사용되는 문자는 /C 스위치에서 지정한 선택문자들에 포함된 것이어야 하며, 지연 시간의 범위는 0부터 99초까지의 초단위 시간을 사용할 수 있다. 
    CHOICE 명령이 ERRORLEVEL 변수는 /C 스위치에 처음 할당되는 키가 /T옵션에서 디폴트 키로 정해졌을 때, 이 키가 눌려지지 않고 시간이 지나 들어온 값이면 1, 두 번째 키는 2, 세 번째는 3과 같이 계속해서 주어지며 이들 이외의 키가 눌려진 경우라면 경고음을 내보낸다. 그리고 각 스위치나 옵션에서 어떤 문제가 발생해서 에러가 발견되면 ERRORLEVEL값이 255에 설정되며, 사용자가 CTRL+BREAK나 CTRL+C를 눌러 중지한 경우라면 CHOICE 명령은 에러 레벨 값을 0에 설정하게 된다. 이러한 에러 레벨 변수 값을 배치 프로그램에서 사용할 경우에는 큰 값에서 작은 값으로 비교하는 내림차순으로 사용해야 한다. 예제를 한번 보도록 하자.

     

    choice /c:ync YES, NO, or Continue
    Yes, No, or Continue [Y,N,C]?

     

    이 명령은 Y,N,C와 같은 세 가지 선택키를 보여주며 Yes, No, or Continue와 같은 메시지를 앞에 보여주게 된다.

    또 다른 예제인 /T 스위치를 사용한 예를 보도록 하자. 

    choice /c:ync /t:n,5

     

    화면에 나타난 메시지 없이 다음의 [Y,N,C]? 라는 선택키만을 보이고 5초동안 기다릴 것이다. 그러나 5초 후에 사용자가 누른 키가 없다면 CHOICE는 디폴트로 설정된 N키를 선택하고 두 번째 키에 의한 에러 레벨 값 2를 내보내게 되는 것이다. 
    이와 같은 에러 레벨을 이용한 배치 파일을 구성하기 위해서는 choice는 아주 다양한 배치의 실행을 돕는다. 만약 에러 레벨의 검사후 원치 않는 값이면 프로그램을 빠져나오도록 구성할 수도 있다. 도스의 외부 명령어인 chkdsk를 실행하기 위해 다음과 같이 choice 명령을 구성할 수 있을 것이다.

     

    \choice /ty,5 chkdsk for your drive

    if errorlevel 2 goto SkipCheck

    CHKDSK c:

    :SkipCheck

    <예제 2-13> choice문을 이용한 배치 파일

     

    디폴트 선택키로 y, n이 주어져 있다. /T스위치에서 5초 안에 키가 안 눌려지면 Y키를 CHOICE에 전달하고 C 드라이브에 대한 CHKDSK를 실행하게 된다. 그러나 5초 이내에 디폴트 키가 아닌 N키가 눌려지면 에러 레벨2가 전달되어 SkipCheck라는 레이블로 이동하게 되어 CHKDSK C:의 실행이 건너띄게 된다. 
    실제로 배치 프로그래밍에서 CHOICE 명령과 같이 사용자의 키 입력이나 선택를 요구하는 부분을 필요로 하는 경우가 많이 있다. 이런 대화식 선택 화면을 구성하기 위해 CHOICE는 매우 유용한 명령으로 이용될 것이다. 

     

     

     


http://urin79.com

우린친구블로그

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소