해당 명령어 뒤에/?
를 붙이면 도움말이 나온다.
예를 들어 FOR 반복문의 사용법이 궁금하다면FOR/?
또는 HELP FOR
로 동일한 결과를 얻을 수 있다.
텍스트 파일로 저장하는 명령어는 뒤에> FILENAME.txt
로 출력 결과를 텍스트 파일로 저장한다.
EX)
FOR/? > "FILENAME.txt"
ECHO
ECHO는 화면에 메시지를 출력해 준다. 주로 SET, IF, GOTO 등과 결합하여 메뉴를 보여줄 때 많이 사용한다.
보통 배치파일 첫 줄에는 @ECHO OFF 를 해준다.
만약 @ECHO OFF 를 하지않으면 각 명령줄을 화면에 그대로 출력 하고실행을 하기 때문에 화면이 혼잡해진다.
ECHO 명령어 출력 결과를 텍스트파일로 저장할 수 있다.
DISKPART를 사용하는 경우 배치파일에서는 DISKPART 다음줄부터 작동하지 않는다.
이럴 때는 DISKPART 다음줄부터 사용될 명령어를 스크립트로 저장한 다음DISKPART /S
스크립트 이렇게 사용해야 한다.
EX)
@echo off
pushd %~dp0
echo create vdisk file=d:\test.vhd type=expandable maximum=20480 > test.txt
echo attach vdisk >> test.txtecho create partition primary >> test.txt
echo format quick fs=ntfs >> test.txtecho assign letter >> test.txt
echo exit >> test.txt
diskpart /s test.txt
위 예제는 윈도우 7에서 D 드라이브에 TEST.VHD 파일을 자동으로 생성하는 기능을 한다.
※ ESCAPE 문자
echo 로 리디렉션을 할때 만약 >> 기호도 echo의 일부분으로 포함시키고 싶을때는 아래와 같이 예와 같이 사용한다.
echo dir /b >> list.txt >> test.txt
위 구문을 실행하면 test.txt에dir /b
부분만 들어간다.dir /b >> list.txt
를 넣고 싶은경우 caret 문자^
를 붙여주면 된다.
echo dir /b ^>^> list.txt >> test.txt
PUSHD %~DP0
FOR 구문의 대체 변수 참조 확장이다. 배치파일에서 %0은 그 배치파일의 전체 경로를 지칭한다.
%0 사이에 들어있는 ~dp 는 % 변수를 들라이브 문자와 경로로만 확장해 준다.
%0 | "C:\Users\UserName\Desktop\예제.cmd" |
%~0 | C:\Users\UserName\Desktop\예제.cmd |
%~d0 | C: |
%~p0 | \Users\UserName\Desktop\ |
%~n0 | 예제 |
%~x0 | .cmd |
%~dp0 | C:\Users\UserName\Desktop\ |
따라서 pushd %~dp0 명령어는 명령 프롬프트가 배치파일이 존재하는 위치로 돌아오게 된다.
※ PUSHD %~DP0 와 CD /D %~DP0 의 동작은 동일하다.
콘솔창에 표시되는 창 제목을 지정한다.
EX)
title 콘솔창 제목
콘솔창 크기를 지정한다.
EX) 40열 11행 콘솔창 생성
mode con cols=40 lines=11
콘솔창의 화면 색을 지정한다. 첫째 자리는 배경색이고 둘째 자리는 문자색이다.
0 | 검정색 | 1 | 파랑색 | 2 | 초록색 |
3 | 옥색 | 4 | 빨강색 | 5 | 자주색 |
6 | 노랑색 | 7 | 흰색 | 8 | 회색 |
9 | 연한 파랑색 | A | 연한 초록색 | B | 연한 옥색 |
C | 연한 빨상색 | D | 연한 자주색 | E | 연한 노랑색 |
F | 밝은 흰색 |
EX)
color 1F
화면을 Clear 한다.
일시정지 명령어이다. 아무 키나 누르면 다음 명령어로 넘어간다.
EX) IF 문자열1==문자열2 명령어
set A=test1
if %A%==test1 echo %A%는 test1와 같다.
set B=test2
if %B% == test3 echo %B%는 test3와 같다.
첫번째 IF 구문은 조건이 참이기 때는에 "test1 는 test1d와 같다" 문구를 출력해준다.
두번째 IF 구문은 조건이 거짓이기 때문에 그 뒤에 나오는 echo 명령어는 무시된다.
IF 뒤에 /i 를 붙이면 대소문자를 구분하지 않는다.
숫자 비교에는 아래 비교 연산자들이 사용된다.
EQU | 같음 |
NEQ | 같지 않음 |
LSS | 보다 작은 |
LEQ | 작거나 같음 |
GTR | 보다 큰 |
GEQ | 크거나 같음 |
EX)
if 5 equ 5 echo 5는 5와 같다.
if 5 neq 5 echo 5는 5와 같지 않다.
if 5 lss 5 echo 5는 5보다 작다.
if 5 leq 5 echo 5는 5보다 작거나 같다.
if 5 gtr 5 echo 5는 5보다 크다.
if 5 geq 5 echo 5는 5보다 크거나 같다.
IF NOT
은 IF 반대로 뒤에 나온 조건이 거짓인 경우에 IF NOT은 참이 되기 때문에 명령을 실행한다.
IF EXIST
는 지정한 파일, 폴더가 존재하면 조건이 참이 된다.
EX) 64비트 윈도우인경우 첫번째 echo 출력, 32비트 윈도우인 경우 두번째 echo 출력
if exitst %windir%syswow64 echo 이 윈도우는 64비트 이다.
if not exist %windir%syswow64 echo 이 윈도우는 64비트가 아니다.
IF ERRORLEVER
실행된 프로그램의 종료코드를 사용해 조건을 판단한다.
일반적으로 오류없이 잘 실행된겨우 종료코드는 0이고, 오류가 발생하면 종료코드는 1이상이다.
EX)
ren C:\Windows WindowsXPif errorlevel 1 echo 윈도우 폴더는 이름을 변경할 수 없음.
ELSE
EX)
if exist %windir%\syswow64 (echo 이 윈도우는 64비트 이다.)
else (echo 이 윈도우는 64비트가 아니다.)
for /f "옵션" %변수 in (문자열, 파일, 명령어의 출력값 등) do 명령어
EX)
for %a in (*.msu) do start /wait wusa %a /quiet /norestart
옵션
tokens=
FOR 구문은 각 행별로 분석하는데 이때 토큰은 각 행의 몇번째 문자열을 전달해 줄지 지정한다.
문자열의 기본 구분 단위는 공백이다.
for /f "tokens=3" %a in ("Hello world !!") do echo %a
위 예제를 입력하면 결과는 세번째 문자열인!!
가 출력 된다.
delims=
토큰은 기본적으로 공백으로 구분하는데 delims 뒤에 구분 문자를 지정하면 지정된 구분 문자로 대체 된다.
for /f "tokens=3" %a in ("I LOVE YOU-SO MUCH") do echo %a
for /f "tokens=2 delims=-"%ain ("I LOVE YOU-SO MUCH") do echo %a
for /f "tokens=4 delims=-"%a in ("I LOVE YOU-SO MUCH") do echo %a
첫번째 줄은 delims 가 없기 때문에 공백이 구분 문자라서 세번째 토큰은 YOU-SO 가 된다.
두번째 줄은 - 문자가 구분자라서 두번째 토큰은 SO MUCH 가 된다.
세번째 줄은 - 와 공백이 동시에 구분자라서 네번째 토큰은 SO 가 된다.
skip=
위에서 부터 몇줄까지 무시 할지 결정해준다. 필요한 토큰이 세번째 줄에 있다면 skip=2 로 처음 두줄은 무시한다.
usebackq
이 옵션은 공백을 포함한 파일 경로 양쪽에 큰 따옴표를 붙여준다.
for /f "tokens=1" %a in (MY TEST.TXT) do echo %a
for /f "tokens=1" %a in ("MY TEST.TXT") do echo %a
for /f "tokens=1 usebackq" %a in (MY TEST.TXT) do echo %a
위 3 가지 예중 정상적으로 출력 되는건 세번째 줄이다.
첫번째 줄은 <Y 라는 파일과 TEST.TXT라는 파일을 찾기 때문에 실패한다.
두번째 줄은 "MY TEST.TXT"를 파일 이름이 아닌 하나의 문자열로 인식하기 때문에 MY 가 출력 된다.
세번째 줄은 MY TEST.TXT 파일 안에서 각 행의 첫번째 토큰을 출력해 준다.
/L
for /l %a in (1, 1, 5) do start /watit imagex /export h:\sources\install.wim %a e:\intall.wim
위 예제는 1부터 5까지 1씩 증가하는 인덱스를 순서대로 e:\install.wim 파일로 export 하는 예제이다.
만약 (5, -1, 1) 을 사용하면 5부터 1까지 -1씩 감소 된다.
SET 변수=문자열
형태로 왼쪽에는 변수 이름 오른쪽에는 변수의 값을 대입한다.
배치파일에서 변수를 호출할 때는 양쪽에 %를 붙여 호출한다.
EX)
set A=TEST
echo %A%
SET /A 변수=수식
변수에 숫자를 할당할 때는 옵션 없이 할당하면 되지만 수식의 계산 결과를 할당하려면 /A 옵션을 사용해야 한다.
EX)
set B=5
set /a B=B+3
echo %B%
SET /P
C언어의 scanf 함수와 동일하게 사용자의 입력을 받는 옵션이다.
EX)
@echo offset /p age=나이를 입력하세요 :
echo 당신의 나이는 %age% 입니다.
pause
exit
EX) 뒤에서 10개의 문자만 추출
@echo off
set test=당신의 나이는 20세 입니다.
set test=%test:~-10%
echo %test%
위 예제의 결과는"는 20세 입니다."
GOTO 뒤에 레이블을 적어주면 해당 레이블로 이동한다. 레이블은 클론으로 시작된다.<
EX)
@echo off
set test=당신의 나이는 20세 입니다.
set test=%test:~-10%
echo %test%
:menu
cls
echo.echo 1. 저는 남자입니다.
echo 2. 저는 여자입니다.
echo.
set /p menu=번호를 선택해주세요 :
if "%menu%"=="1" goto male
if "%menu%"=="2" goto female
goto menu
:male
cls
echo.
echo 당신은 남자입니다.
echo.
pause
exit
:female
cls
echo.
echo 당신은 여자입니다.
echo.
pause
exit
위 예에서 set /p menu 값에 1을 입력하면 male 부분으로 이동하고 2를 입력하면 female 부분으로 이동한다.
1 또는 2가 아닌 이 외의 값을 입력하면 menu 부분으로 다시 이동한다.
※ exit 대신 :EOF 를 사용하기도 한다. GOTO :EOF 로 exit와 같은 효과를 얻을 수 있다. :EOF 레이블을 만들어줄 필요는 없다.