윈도 배치(Batch) 파일 프로그래밍 팁
DOS/Windows CMD batch file(.bat, .cmd) programming tip
실행
배치 스크립트 실행 종료
EXIT 로 종료하면 batch 를 실행하는 CMD.exe 도 종료됨.
GOTO:EOF 를 실행하면 현재 배치 파일 실행만 종료.
프로그램 실행후 종료
여러 개의 JDK 가 설치되었을 경우 특정 프로그램(Ex: BlackBerry IDE)이 특정 JRE 를 요구할 경우 다음처럼 활용 가능.
@ECHO OFF set path=c:\devel\java\jre6;%PATH% start eclipse.exe exit
Change Directory 시 드라이브도 이동하기
cd 로 디렉터리를 이동할 경우 다른 드라이브에 있는 폴더면 d:\ 처럼 해당 드라이브로 가는 명령어를 한 번 더 실행해야 한다.
cd 명령어에 /D 옵션을 추가하면 드라이브도 이동해 준다.
[c:\] cd /D d:\mydir
긴 명령어에 대해 Multi ine 사용
Unix 와 다르게 Windows 에서 멀티 라인은 ^ 문자를 사용
xcopy.exe file1.txt^ "C:\Program Files ^(x86^)\MyApp\"^ file2.txt /F /Q /D
조건문 사용
IF ELSE 조건문
다음 구문처럼 IF 와 ELSE 사용 가능. 단 ELSE IF 구문은 지원하지 않음.
ELSE 는 IF의 닫는 괄호와 같은 라인에 있어야 함.
if condition ( echo condition1 ) else ( echo else condition1 )
예제
배치 실행시 입력한 첫번 째 파라미터 따라 다른 분기
IF "%1"=="param1" ( ECHO Your first param is "%1" goto param1 ) ELSE ( goto other ) :param1 dosomething GOTO:EOF :other doanything GOTO:EOF
첫번째 파라미터는 %1, 두번째는 %2, n 번째는 %n
모든 파라미터는 %* 를 의미
Equal, Great than, less than 비교문
구문 | 의미 |
---|---|
EQU | equal |
NEQ | not equal |
LSS | less than |
LEQ | less than or equal |
GTR | greater than |
GEQ | greater than or equal |
Parameter
Parameter 전달
첫번째 파라미터는 %1, 두번째는 %2, n 번째는 %n
모든 파라미터는 %* 를 의미
파라미터의 갯수 확인
파라미터의 갯수를 저장하는 변수인 argc 가 없으나 다음과 같이 하면 argc 사용 가능. %* 는 모든 파라미터를 저장하는 변수임.
set argc=0 for %%x in (%*) do Set /A argc+=1 echo argc=%argc%
파라미터에 따른 분기
@ECHO OFF set argc=0 for %%x in (%*) do Set /A argc+=1 if %argc% == 0 ( echo no param ) if %argc% == 1 ( echo param count = 1 "param=%1" ) if %argc% == 2 ( echo param count = 2, "param=%1 %2" ) else ( echo param count = %argc%, "param=%*" ) if "%1"=="apple" ( echo "param1 is apple" goto end ) else { echo "param1 is not apple" goto end }
FOR 구문
for 로 범위내 반복 실행
for /l %x in (1, 2, 100) do echo %x
첫번째 1은 시작 범위,100 은 종료, 2 는 증가값.
matching 파일 대상 for loop
FOR %I in (*.pdf) DO echo %I
batch 스크립트에서는 %I 대신 %II 로 작성해야 함.
특정 경로에 있는 모든 pdf 파일을 PDFtoPrinter 를 사용해서 프린터로 출력
@ECHO OFF FOR %%I in ("D:\Documents\mydoc"\*.pdf)^ DO PDFtoPrinter.exe "%%I"
for loop 로 현재 디렉토리 순회하기
디렉토리를 순회하며 작업을 할 일이 있을 경우 유용
for /d /r %var in (*) do dir we found "%var"
- /d : sub 디렉토리
- /r : recursive
- %var : 현재 디렉터리 이름이 담기는 변수
- in (*) : 검색된 모든 디렉터리
- do : 검색된 디렉터리에 실행할 명령. 위 경우 we found 메시지 뒤에 디렉터리 명 출력
예제: 현재 폴더 밑에 있는 모든 .png 파일을 상위 디렉터리의 images 로 이동
FOR /D %dirs in (*) do move "%var"\*.png ..\images
기타
echo 로 new line 출력
echo hello\nworld 로는 개행 문자가 출력 안 되고 다음처럼 echo. 으로 출력해야 함
echo hello echo. echo world
shell 의 if -f 처럼 batch 에서 file 의 존재 여부 확인
if exist {insert file name here} ( rem file exists ) else ( rem file doesn't exist )
Ref
- http://en.wikibooks.org/wiki/Windows_Programming/Programming_CMD
- http://www.computerhope.com/batch.htm