• 동시 실행 문제
단순히 위와 같이 파일 경로만 정해주면,
파일이 실행된 후에 그 파일이 종료되고 커맨드가 실행창으로 넘어올 때까지 대기하게 된다.
동시 실행을 위해서는 배치 명령어 start 를 사용하면 되겠다.
start 명령어의 /d 옵션은 파일의 시작 위치를 나타내며, /b 는 새로 창을 띄우지 않겠다는 옵션이다.
(cmd 에서 start /? 으로 확인해보자)
start /d "C:\Program Files\Mozilla Firefox\" /b firefox.exe
start /d "C:\Program Files\Internet Explorer\" /b iexplore.exe

  • 배치 파일의 실행
다른 배치 파일은 call 명령어를 이용해 실행시켜야 한다.
call "C:\QuickStart\setNetworkDrive.bat"


배치 파일(.bat)로 테스트 스크립트를 작성하다보면 sleep 해야 할 경우가 생기는데 이 경우 다음과 같이 하면 된다.

ping -n 초 127.0.0.1 >nul

또는

timeout /t 초 /nobreak > NUL


timeout 은 Windows 7 에서부터 되는 거 같은데(XP에선 없었던 거 같은데..) 유용하다. /nobreak 옵션을 주면 배치 파일에서 Ctrl + C를 눌러도 멈출 수가 없으니 웬만하면 빼자-_-;;



파일 만들기(***.bat)

[방법]

c:\>copy con ***.bat

CLS

DIR

^Z

 

기본 명령어

(1) 일반적인 도스명령를 그대로 사용한다.

(2) 배치에만 사용하는 전용 명령가 있다.

  1. REM       
    : 배치파일 속에 달고 싶은 설명, 주석
  2. PAUSE     
    : 배치파일 실행중 일시 멈추게함
  3. ECHO "문자열"
    : 에코명령 다음에 오는 문자열을 화면에 나타낸다.
  4. ECHO ON
    : 이후부터 '명령어'라인을 화면에 보인다.
  5. ECHO OFF
    : 이후 실행되는 명령어 라인을 화면에 나타내지 않는다.
  6. @ECHO OFF 
    : 'ECHO OFF'라는 그 자체까지 보이지 않게 한다.
  7. ECHO
    : 현재 ECHO ON/OFF 상태를 확인한다.

분기 명령어

: 배치파일의 순차적 수행을 필요에 따라 변경할 때 사용한다.

 

(1) CALL

: 배치파일 실행 중 다른 배치파일을 호출하여 실행시키고 다시 원래의 배치파일로 돌아오게 하는 명령이다.

[문법] 

CALL "파일명"

[보기]

c:\>COPY CON file1.bat

DIR C:\ > C:DIRList.TXT

^Z

c:\>COPY CON file2.bat
CALL file1.bat
TYPE C:DIRList.TXT

^Z

[설명]

"file2.bat"을 실행하면 "file1.bat"란 배치파일을 불러(CALL) 실행하여 "DIRList.TXT"파일을 만든 후, 다시 "file2.bat"파일로 돌아와 "DIRList.TXT"파일을 화면에 출력한다.

 

(2) IF

: 주어진 조건에 따라 명령을 선별적으로 선택, 실행하는 명령이다.

[문법]

  1. IF EXIST [파일이름] [명령] 
    : 찾는 파일이 존재하면 명령을 실행하라
  2. IF NOT EXIT [파일이름] [명령] 
    : 찾는 파일이 없으면 명령을 실행하라
  3. IF "문자열1" == "문자열2" [명령]
    : "문자열1"과 "문자열2"가 서로 일치하면 명령을 실행하라.
  4. IF NOT "문자열1" == "문자열2" [명령]
    : "문자열1"과 "문자열2"가 서로 불일치하면 명령을 실행하라.
  5. IF ERRORLEVEL [값] [명령]
    : IF명령 바로 앞에서 수행되었던 프로그램이 수행을 마치면서 남긴 종료코드(ExitCode)를 검사하여 지정 값보다 크면 명령을 실행하라는 뜻이다.
  6. IF [NOT] ERRORLEVEL [값] [명령]
    : IF명령 바로 앞에서 수행되었던 프로그램이 수행을 마치면서 남긴 종료코드(ExitCode)를 검사하여 지정 값보다 작으면 명령을 실행하라는 뜻이다.

[보기]

  • IF EXIST *.BAK DEL *.BAK
    : BAK라는 백업파일이 있으면 모두 지워버리라.
  • 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"라고 표시한다.
  • 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 !' 라는 메시지가 나온다.

(3) GOTO

: 레이블 이름이 있는 행으로 실행 순서를 옮긴다. '레이블(Label)'은 8자이 내로, 레이블 앞에는 콜론(:)을 사용한다.

[문법]

GOTO 레이블

:레이블

[보기]

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

[설명]

"HWPMV.BAT"을 실행하면 현재 디렉토리에 있는 모든 HWP 파일을 "c:\HNCDOC" 디렉토리로 옮기고 "HWPFILE MOVE DONE !" 메시지를 화면에 보이고 END 레이블로 와서 배치파일을 종료한다. 옮길 HWP 파일이 없으면 "*.HWP FILE NOT FOUND !" 메시지가 나오고 배치파일을 종료한다.

 

(4) 변수

: 바꿔 쓸 수 있는 인자(Replaceable Parameter)를 의사변수라 하며, %0 ~ %9(10개)으로 표시한다.

[문법]

c:\>명령어 파일1 파일2   "    "   "   "   "   "          파일9
         %0      %1    %2  %3  %4  %5  %6  %7  %8  %9

[보기]

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' 파일 내용이 출력된다.

 

(5) 기타변수

[보기]

c:\dev\walp>test.bat
~dps0: C:\dev\walp\
~dp0: C:\dev\walp\
~s0: C:\dev\walp\test.bat
~0: test.bat
~dps0\..: C:\dev\walp\\..
~dps0..: C:\dev\walp\..


(6) SHIFT

: 쉬프트는 옮김, 변위를 의미하는 데 10개 이상의 대체 인자도 사용 가능하다. 대체인자를 한 자리씩 왼쪽으로 이동한다.

[보기]

: 지정한 문장(text) 파일들을 차례로 TYPE시키는 배치파일 예.

c:\>COPY CON TELLME.BAT
@ECHO OFF
:BEGIN
IF NOT EXIST %1 GOTO END
TYPE %1
SHIFT
GOTO BEGIN
:END
ECHO 더이상 파일이 없습니다.
^Z

[설명]

"c:\>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(고리)라고 한다.

 

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



 


출처 http://ohgyun.com/173
출처 http://fuzzer4life.blogspot.kr/2013/06/sleep.html
출처 http://blog.naver.com/6420h?Redirect=Log&logNo=60095322019





Posted by 장안동베짱e :