Bat File (배치파일) 명령어

2016. 4. 29. 13:59IT-OS/Window

반응형


윈도우 명령어

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 : 
파일과 디렉토리 트리를 복사한다.


 

 

배치파일 명령어

 

배치 파일 연산자

쉘 스크립트 동의어

%

$

명령어줄 매개변수 접두사

/

-

명령어 옵션 플래그

\

/

디렉토리 패스 구분자

==

=

(같음) 문자열 비교 테스트

!==!

!=

(다름) 문자열 비교 테스트

|

|

파이프

@

set +v

현재 명령어를 에코하지 말 것

*

*

파일명 "와일드 카드"

> 

파일 재지향(덮어 쓰기)

>> 

>> 

파일 재지향(덧붙여 쓰기)

< 

표준입력 재지향

%VAR%

$VAR

환경 변수

REM

#

주석

NOT

!

뒤에 나오는 테스트 부정

NUL

/dev/null

명령어 출력을 없애기 위한 "블랙홀"

ECHO

echo

에코 (Bash 에는 옵션이 많이 있음)

ECHO.

echo

빈 줄 에코

ECHO OFF

set +v

다음에 나오는 명령어를 에코하지 말 것

FOR %%VAR IN (LIST) DO

for var in [list]; do

"for" 루프

:LABEL

없음 (필요치 않음)

라벨

GOTO

없음 (대신 함수를 씀)

스크립트의 다른 곳으로 건너 뜀

PAUSE

sleep

일정 간격을 두고 잠시 대기

CHOICE

case 나 select

메뉴 선택

IF

if

if-test

IF EXIST FILENAME

if [ -e filename ]

파일이 존재하는지 확인

IF !%N==!

if [ -z "$N" ]

변경가능한 매개변수인 "N"이 없다면

CALL

source 나 . (도트 연산자)

다른 스크립트를 "포함"

COMMAND /C

source 나 . (도트 연산자)

다른 스크립트를 "포함"(CALL과 동일)

SET

export

환경 변수를 세트

SHIFT

shift

명령어줄 변수 목록을 왼쪽으로 이동(shift)

SGN

-lt or -gt

(정수) 부호(sign)

ERRORLEVEL

$?

종료 상태

CON

stdin

"콘솔"(표준입력)

PRN

/dev/lp0

(일반적인) 프린터 디바이스

LP1

/dev/lp0

첫번째 프린터 디바이스

COM1

/dev/ttyS0

첫번째 시리얼 포트

 

 


 

 

bat(배치파일 제대로 쓰기

.  "@echo off" 일반적으로 사용하기
====================================
화면에 명령어들이 표시되지 않게 echo off 하고 라인도  화면에 표시 되지 않게 하기 위해서 다음과 같이 하면 된다.
 @echo off
 것은 MsDos 3.30 이후 버전에서만 작동한다.  이것을  일반적으로 사용하게 하기 위해서 3.30이상의 MsDos 사용한다면  autoexec.bat 안에 다음과 같이 적어 놓는다.
 set _echo=@
그리고 배치파일에서 다음과 같이 사용한다면 어느 버전의 MsDos버전에서도 작동한다.
 %_echo%echo off

2.  모든 파일을 지우기
=====================
가장 흔하게 질문되는 (FAQ)중의 하나는 del *.*    사용껦 ,"Are you sure (Y/N)?" 라는 확인을 어떻게 하면 나타나지 않게 하는것이다다음과 같이 사용한다.
 echo y| del *.*
화면에 나타나는 메세지도 보이지 않게 하려면 다음과 같이 한다.
 echo y| del *.* > nul
이러한 확인 절차를 표시하지 않게 하는 것은 토론의 여지가 많지만,위와 같이 사용할  있다.

(사실 del /Q *.*  같이 /Q(Quiet) 옵션으로도 가능하지만 이쪽은 필터를 사용하여 입력을 자동화 하는것에 촛점을 맞춘듯 싶다. 3.30 버전에선 안될 수도 있었겠죠)

3.  다중 반복
============
배치파일에서 다중 루프(반복) 사용하는 것이 가능하다다음의 두배치파일을 생각해 보자그리고 test.bat 불러 실행시켜 보자.
  echo off
  rem TEST.BAT
  for %%f in (a b c d e f) do %comspec% /c test2 %%f

  echo off
  rem TEST2.BAT
  for %%g in (1 2 3) do echo %1%%g
아니면 한줄로 다음과 같이 써서 사용할 수도 있다.
  for %%f in(a b c d e f) do %comspec% /c for %%g in (1 2 3)  do echo %%f%%g
 
 두번째 방법의 단점은 echo  화면에 표시된다는 것이다.

4.  디렉토리가 존재하는지 확인하는 방법
======================================
디렉토리가 있는지 확인하는 것은 가끔 매우 쓸모있는 일이다.  %1 디렉토리가 없다면 다음 확인은 참이 될것이다.
 if not exist %1nul if not exiat %1nul echo Directory  %1  does not exist

5.  프로그램을 현디렉토리나 경로에서 사용할  있는지 확인하기
=============================================================
배치 프로그램에서 프로그램을 불러서 사용할때 파일에 대한  경로를 써주지 않았을 경우 프로그램이 현재의 디렉토리나  경로에서 사용가능한지 확인할  도움이  것이다.
  set _found=
  if exist %1 set _found=yes
  for %%d in (%path%) do if exist %%d%1 set _found=yes
  for %%d in (%path%) do if exist %%d%1 set _found=yes
  if "%_found%"=="yes" goto _continue
  echo %1 is not at path or the current directory
  goto _out
  :_continue
  echo %1 found at path or in the current directory
  :_out

6.  배치파일에서 서브루틴이나 재귀적방법을 사용하기
==================================================
배치파일 안에서 서브루틴을 사용하는 것은 가능하다방법은 서브루틴이 실행된  뒤에  돌아가야할  곳을  가르키는  환경변수(예를들면_return) 설정하는 것이다이런 예는 UNPACK.BAT 이나 BOOT.BAT:_common  :_subru 부분에서 찾아   있다.
마찬가지로 재귀적인 사용이 가능하다. ("재귀적인  방법"  의미는   배치파일이  자기  자신을  불러  사용하는  것이다.)    예는 SAFEDEL.BAT에서 아래의 행을 따라 찾아 보면 된다.
 for %%f in (%1) do call safedel %%f recurse
배치파일의 0번째 인수(%0) 배치파일 자신을 나타내므로,  safedel %0으로 대치 되어 사용할 수도 있다.

7.  매개 인수(parameter) 대문자로 바꾸기.
=========================================
다음은 배치파일에 사용한 인수 %1  대문자로 바꾸어 주는  예제이다이는 MsDos path 대문자로 바꾼다는 점을 이용한 것이다결과는 upcase_ 저장될 것이고원래의 경로가 다시 저장될 것이다.
  set tmp_=%path%
  path=%1
  set upcase_=%path%
  path=%tmp_%

8.  새로운 디렉토리를 경로에 붙이기
==================================
자주 필요한  기술은 매우 간단하다예를 들어 %1 경로에  덧붙이려면
 path=%path%;%1
이라고 하면된다.
 기술은 배치파일 안에서만 사용할  있다배치파일 안에서만 환경변수(%path%) 사용할  있기 때문이다존재하지 않는 디렉토리를 덧붙이려한다거나 중복해서 경로를 덧붙이는 것을 방지하는 ADDPATH.BAT이라는 배치파일이 있다.

9.   파일을 비교하기
=====================
배치파일에서  파일이 같은지 아닌지 확인해   있다  기술은 MsDos 외부 명령어인 fc.exe find.exe 사용한다. (외부  명령어라는 뜻은 MsDos 같이 있는 프로그램들이다대부분의 외부 
령어용 프로그램들은 c:dos  위치한다.)
  fc %1 %2 > tmp$$$
  type tmp$$$ | find  /i  "fc:  no  differences  encountered"  >diffe$$$
  if exist notsame$ del notsame$$$
  copy diffe$$$ notsame$ > nul
  if not exist notsame$ echo Files %1 and %2 are different
  if exist notsame$ echo Files %1 and %2 are identical
  if exist tmp$$$ del tmp$$$
  if exist notsame$ del notsame$
  if exist diffe$$$ del diffe$$$
좀더 생각하면  기술은 다른 목적에도 사용할  있다이는  파일안에 주어진 문자열이 있는지 확인 하는데 바탕을 두고 있기  때문이다.

10.  빈줄을 쓰기
===============
이는 간단하지만 종종 필요하고 유용한 기술이다. echo 바로  다음에점(.) 찍으면 빈줄을 표시할  있다.
  echo.

11.  pause 이용해 메세지를 표시하기
====================================
메세지를 손쉽게 나타나게   있다메세지를 echo 다음  pause  사용하는데, pause 메세지를 nul 보내면 된다.
 echo Break to quit, any other key to remove the tmp directory
 pause > nul

12. for 이용한 다양한 rename 기술 
===================================
 기술이 기본적이고 사소하지만이를 생각해 내기란 쉽지 않을 것이다. for 문은 파일의 이름을 바꾸는데 특별히 유용하다.  예를  들면내가 다음의 파일들을 가지고 있을 , (터보  파스칼  TP  4.0,
5.0, 5.5, 6.0) 
내가 버전 29 30으로 바꾸기 원한다고 할때,
  tspa2940.zip
  tspa2950.zip
  tspa2955.zip
  tspa2960.zip
다음은 손쉽게 그런 일을 해준다.
 for %f in (40 50 55 60) do re tspa29%f.zip tspa30%f.zip
물론 파일이름 바꾸는  말고도  기술로 다양한 일을   있다.
하나의 예는 다음과 같다.
  for %d in (a b) do format %d:

13.  와일드카드를 확인하기
=========================
 예제는 인수 %1 와일드 카드를 사용하고 있는지 아닌지  확인한다.
  @echo off
  for %%f in (%1) do if "%%f"=="%1" goto _nowilds
  echo Parameter %1 contains wildcards (or is missing)
  :_nowilds

14.  배치 작업을 중간에 그만두지 못하게 하기
===========================================
ctty 
명령어를 사용해서 입력장치나 출력장치를 새로 설정하여 배치파일을 중단시키는 것을 방지할  있다여기의 예제는  패스워드로 e 넣어야 하는 간단한 배치파일이다
ctty
  nul  돌려진  동안<,> 리디렉션이 필요한 것을 눈여겨 보라. ask라는 배치파일을  
 위한 프로그램은 같이 포함되어 있다. ( MsDos choice 비슷하다에러 레벨을 입력한 문자의 아스키 값으로 돌리는 것만 틀리다.)
  @echo off
  ctty nul
  echo Now you cannot break the batch with ^C or ^Break > con
  :_ask
  echo Use e to break > con
  ask /b /d < con
  if errorlevel==101 if not errorlevel==102 goto _out
  goto _ask
  :_out
  ctty con
  echo Back to normal. Now you can break the batch  with  ^C  or
^Break.
 배치파일이 작동되고 있는 동안에는 alt-crtl-del  다시 부팅할수도 없다 같은 일을 하는 noboot.exe라는 램상주 프로그램도 있다.

15.  autoexec.bat 중지하고 건너뛰는 것을 방지하기
==================================================
브레이크를 눌러 autoexec.bat 건너 뛰어 지나치지 않게 하기 위해서 다음과 같이 config.sys 쓰면 된다.
  shell=c:command.com /p nul
이렇게 하기 전에 만일의 경우를 대비해서 플로피 디스켓으로 부팅할준비를  해둔다. autoexec.bat  뒷줄에 'ctty con'이라고   붙여야 된다그렇게 하지 않으면 키보드가 말을 듣지 않을 것이고준비한 플로피 디스켓으로 부팅해야  것이다 :-).

16.  확장자를 인식하기
=====================
단지 확장자를 확인하려던가주어진 파일의 이름에서 확장자를 환경변수로 저장하려고 할때 것은 매우 유용하다어떻게 하는지  여기에 있다 배치파일은 PC-Magazine July 1992, Vol 11, No.  13,
page 528
 나온  정보를 이용한 것이다. for 루프에서  슬레시(/) 시작하는 인수는  부분으로 나누어지는데처음 부분은 인수의  첫문자이고 다른 부분은 나머지 문자열이다.
 해결방법에서 하나의 문제점은 .* 이라던가 .???  이란  확장자를 인식하지 못하는 것이다그러나 "와일드카드를 확인하기"  이용해서 확인하면  것이다이러한 기술을 이용한 것중에  UNPACK.BAT
 배치파일이 있다.
     @echo off
     set exten_=%1
     :_next
     set prev_=%exten_%
     for %%f in (/%exten_%) do set exten_=%%f
     if ".%exten_%"=="%prev_%" goto _extfound
     if not "%exten_%"=="%prev_%" goto _next
     goto _noext
     :_extfound
     echo The filename %1 has an extension %exten_%
     goto _out
     :_noext
     echo The filename %1 has no extension
     :_out
     set exten_=
     set prev_=

17.  문자 인용부호
===================

%1 배치파일에 주어진 첫번째 인수를 가르킨다이처럼 'echo  %1'이라고 하면 첫번째 인수를 표시해 준다대신에 %1라는 문자를 표시하고 싶은 경우 어떻게 해야하는가?  % 문자는 인용부호처럼  행동한다그래서 %%1이라고  경우 실제로는 "%1"이라고  화면에  표시된다아래의 간단한 연습을 실행해보라.
  @echo off
  if "%1"=="" goto _out
  echo %1
  echo %%1
  :_out
 기능을 이용한 것은 "배치의 보조 배치파일을 없애기"  보아라.
좋은 예로는 DELPATH.BAT 있다.

18.  배치의 보조 배치파일을 없애기
=================================
많은 배치 프로그램이 call 사용해서 보조 배치파일을  불러다  쓴다많은 경우 이런 일을 재귀적인 사용을 통해 자기 자신을  불러다씀으로써  보조 파일을 사용하는 것을 줄일  있다보조코드는  배치파일 자기자신에 넣어 놓는다이러한 기술은 와일드 카드를  받아들이는 TYPE 같은 SHOW.BAT 에서 가장  나타나 있다일반적으로는 개개의 파일을 type하기 위해서  보조파일이  필요하다.  다른  예는
SAFEDEL.BAT
에서 찾아볼수있다.
이와 같은 일을 하기 위한 다른 기술이 있다원래의 배치파일이  보조 배치파일을 만든 다음 그것을 불러 사용하는 것이다이런 것으로는 DELPATH.BAT 예를   있다여기에는  사용되는  드라이브를
보여주는 간단한 예가 있다. (c 부터 t 까지 가능하다여기선  쓰면 줄이 넘어가니까!)
 @echo off
 echo @echo off> tmp$$$.bat
 echo if exist %%1:nul echo Drive %%1: is present>> tmp$$$.bat
 for %%d in (c d e f g h i j k l m n o p q r s t) do call tmp$$$
%%d
 del tmp$$$.bat
디스크의 볼륨  레이블을  찾아내는  창의적인  기교가  PC-Magazine August 1992, Vol. 11, No. 14, p. 527 실렸다여기는 같은  기술을 사용하는  예가 있다환경변수 getdir_ 현재의 디렉토리를  저장한다 기술은 PUSHDIRE.BAT 사용되고 있다.
  @echo off
  echo @echo off> director.bat
  echo set getdir_=%%2>> director.bat
  echo echo %%getdir_%%>> director.bat
  dir | find "Directory"> go.bat
  call go
  if exist director.bat del director.bat
  if exist go.bat del go.bat

19.  subst 명령어를 경로에 사용하기
==================================
어떤 디렉토리를 읽기 쉽게 하기 위해서 간단한  배치파일을  사용한다만약 subst  이미 설정되어서 생길  있는 에러를  방지한다그리고 마지막으로 현재 대치된 디렉토리의 현황을 보여준다.
  @echo off
  if exist m:nul echo The substitution has already been made
  if not exist m:nul subst m: c:math
  if not exist s:nul subst s: c:support
  subst

20.  일주일에 한번 실행하기. (요일을 확인하기)
=============================================
요일을  환경변수에  넣는  것은  어려운  기술이다.  완전한   예는 WEEKLY.BAT에서 찾아볼수 있다 기술의 핵심은 아래에 나와  있는데요일을 weekday_라는 환경변수에 저장하는 것이다일반 도스 프로그램 외에 아무런 보조 프로그램이 필요없다.
  @echo off
  echo.| date | find "Current" > tmp$$$.bat
  echo set weekday_=%%3> current.bat
  call tmp$$$
  echo %weekday_%
  if "%weekday_%"=="Fri" echo Thank God it's Friday
  if exist tmp$$$.bat del tmp$$$.bat
  if exist current.bat del current.bat
  set weekday_=
사실위에서 %%3 대신에 %%4 사용하면 오늘의 날짜를  확인할   있다.

21.  파일이름에 경로가 포함되었는지 확인하기
===========================================
우선 먼저 "확장자를 인식하기" 보면 같은 아이디어인 것을    있다파일이름이 단순히 go.exe  이루어 졌는지,  아니면  경로를 포함해서 r:progsgo.exe  같이  이루어  졌는지  확인하는  것은 r:progs*.exe 같이 확장자를 사용했다면 매우 복잡한 일이다여기서 어떻게 되는지 설명하였다이를 완전히 이해했다면 확실히  배치 파일들에 대해서 이해하기 시작했다고 말할  있을 것이다.
  @echo off
  echo @echo off> tmp$$$.bat
  echo set rest_=%%1>> tmp$$$.bat
  echo :_next>> tmp$$$.bat
  echo set prev_=%%rest_%%>> tmp$$$.bat
  echo for %%%%g in (/%%rest_%%) do set rest_=%%%%g>> tmp$$$.bat
  echo if ":%%rest_%%"=="%%prev_%%" goto _found>> tmp$$$.bat
  echo if "%%rest_%%"=="%%prev_%%" goto _found>> tmp$$$.bat
  echo if not "%%rest_%%"=="%%prev_%%" goto _next>> tmp$$$.bat
  echo goto _nopath>> tmp$$$.bat
  echo :_found>> tmp$$              at
  echo set haspath_=yes>> tmp$$$.bat
  echo goto _out>> tmp$$$.bat
  echo :_nopath>> tmp$$$.bat
  echo set haspath_=no>> tmp$$$.bat
  echo :_out>> tmp$$$.bat
  echo set rest_=>> tmp$$$.bat
  echo set prev_=>> tmp$$$.bat
  for %%f in (%1) do call tmp$$$ %%f
  if "%haspath_%"=="yes" echo Filename %1 includes a path
  if "%haspath_%"=="no" echo Filename %1 does not include a path
  rem if exist tmp$$$.bat del tmp$$$.bat
  set haspath_=

22.  엔터키를 누르지 않고 시간을 보기
====================================
현재의 시간을 보는 간단한 기술은 다음과 같다.
  echo.| time | find /v "new"
시간을 환경변수로 저장하는 방법은 LASTBOOT.BAT 보아라.

23. 에러레벨 값을 확인하는 다른 방법
====================================
많은 프로그램과 몇개의 도스명령어들( diskcomp, format,  xcopy)은끝날  에러 레벨을 발생시킨다에러레벨의 누적적인 성질  때문에 에러 레벨을 확인하는 것은 다소 복잡해진다그래서 만약  에러레벨이 정확히 2인지 확인하기 위해서는 다음과 같이 한다.
 if errorlevel==2 if not errorlevel==3 echo Errorlevel 2
for 
명령어를 사용하는 다른 방법으로 다음을 들수 있다.
 for %%e in (0 1 2  3  4  5  6  7)  do  if  errorlevel==%%e  set
_errlev=%%e
 if "%_errlev%"=="2" echo Errorlevel 2
  일반적으로 다음과 같이   있다.
 for %%e in (0 1 2  3  4  5  6  7)  do  if  errorlevel==%%e  set
_errlev=%%e
 if "%_errlev%"=="2" echo Errorlevel %_errlev%
복잡한 배치파일에서 편리한 방법은 goto 사용하는 것이다.
  for %%e in (0 1 2) do if errorlevel==%%e goto _label%%e
  goto _out
  :_label0
  echo Errorlevel 0
  :_label1
  echo Errorlevel 1
  :_label2
  echo Errorlevel 2
  :_out
 기술을 실제로 사용하는 예는 BOOT.BAT에서 찾아볼수 있다.

24.  배치파일의 출력을 리디렉션(redirection)하기
===============================================
배치파일 안에서의 출력은  쉽게  방향전환(redirecion)  있다다음과 같은 example.bat 이라는 배치파일을 생각해보자.
  @echo This is a redirection test> test
"example"
 실행시키면 아래의 문장을 담은 "test"라는 파일을 생성  것이다.
  This is a redirection test
 줄은 eoln(end of line: ascii 13 + 10)  끝에  포함하고  있다리디렉션 기호 '>' 앞에 아무런 공백도 주지 않는  것이  현명할때가 있다.
배치파일이 만드는 출력을 다시  방향전환(redirection)하는  것은 다소 복잡하다다음과 같은 내용을 지닌 example2.bat 생각해  보자.
  @echo This is another redirection test
실행하면,
  example2 > test
출력은 화면에 나오고 test라는 파일이 생성될  것이다.  출력을  방향 전환 시키기 위해서는 다음과 같이 command.com 명령어 해석기를 통해서 배치파일을 실행해야 한다.( command.com  현디렉토리나 경로에 있어야 한다.)
  command /c example2 > test
이와 같이 하면 내용이 "test"라는 파일에 담길 것이다.

25.  환경저장 공간이 충분한지 확인하기
=====================================
만약 배치파일이 환경저장 변수를 사용하면환경저장 공간이 부족할경우가 있다만약 "Out of environment space"라는 메세지를 받는다
  알려진 방법을 통해서 다음과 같이 config.sys  shell  설정해서 환경저장 공간을 늘릴  있다.
  shell=c:bincommand.com c:bin /e:1024 /p
 보다  알려진 기술로는 환경저장 공간이 모자라기 전에 미리 확인해 볼수 있다아래의 예는 32바이트의 환경이 남아 있는지 확인한다.
 @echo off
 set test_=12345678901234567890123456789012
 if "%test_%"=="12345678901234567890123456789012" goto _yes
 echo Insufficient environment space
 goto _out
 :_yes
 echo Sufficient environment space
 set test_=
 rem Whatever you wish to do
 :_out

26.  드라이브를 사용 못하게 하는 간단한 방법
===========================================
임시로 드라이브를 사용하지 못하게 하려면, subst명령어를 사용하면 된다예는 아래와 같다.
  @echo off
  md c:none
  subst d: c:none
다시 사용하게 하려면,
  @echo off
  subst d: /d
  rd c:none

27. 프린터에 escape 명령어를 보내기
===================================
여기 정말  사소한  기술이  있다.  명령행에서  곧바로  프린터에게 escape sequence 보낼  없다그러나 다음과 같은 배치파일을 이용하면 간단하다.
  @echo ESC%1> prn
ESC
 진짜 escape문자로 에디터로 쓰여져야 된다 방법의 한가지 결점은 라인피드를 보내는 것이다.

28.  무작위 문자열을 만든는 방법
===============================
UseNet news
에서 무작위 문자열을 만드는 방법을 물어보는 사람이 있었다.  대답은 다음과 같다이를 확장해서 공부해보기 바란다.
  @echo off
  echo 10 randomize(val(mid$(time$,7,2))) > tmp.bas
  echo 20 open "tmp2.bat" for output as #1 >> tmp.bas
  echo 30 x$ = mid$(str$(int(rnd*10000)),2) >> tmp.bas
  echo 40 print #1,"@set ramdom_=";x$ >> tmp.bas
  echo 50 close #2 >> tmp.bas
  echo 60 system >> tmp.bas
  gwbasic tmp.bas
  call tmp2
  del tmp.bas
  del tmp2.bat
  set

29.  문자열의 길이를 알아내기
============================
문자열의 길이를 찾아내는 일은 PC Magazine January 26, 1993 issue  실렸다여기서 제안하는 방법은 PC 메거진의 방법과  근본적으로 같지만 일반적이다.
  @echo off
  set test_=Testing the lenght of a string
  echo %test_% > len$&$&$
  dir len$&$&$ | find "LEN$&$&$" > go$$$.bat
  echo @echo off> len$&$&$.bat
  echo set length_=%%                 len$&$&$.bat
  call go$$$
  echo The lenght is %length_% bytes
  del len$&$&$
  del len$&$&$.bat
  del go$$$.bat

30.  MsDos 버전을 환경변수로 저장하기
======================================
ADJCURS.BAT
 보면 알겠지만배치파일로만 버전을 알아낼  수있다.
여기에 다른 방법이 있다.
  @echo off
  ver > go$$$.bat
  echo @echo off> ms-dos.bat
  echo set version_=%%2>> ms-dos.bat
  call go$$$
  echo Your MsDos version is %version_%
  del go$$$.bat
  del ms-dos.bat
 


 

 

bat(배치)파일 문법

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


 

 

for

파일 집합에서  파일에 대해 지정된 명령을 실행합니다.

구문

for {%variable|%%variablein (set) do command [ CommandLineOptions]

매개 변수

{%variable|%%variable}

필수 요소입니다대체 가능한 매개 변수를 나타냅니다명령 프롬프트에서 for 명령을 실행하려면 %variable 사용합니다배치 프로그램에서 for 명령을 실행하려면 %%variable 사용합니다변수는 대소문자를 구분하며 %A, %B 또는 %C 같은 알파 값으로 나타내야 합니다.

(set)

필수 요소입니다지정된 명령으로 처리하려는  이상의 파일디렉터리값의 범위 또는 텍스트 문자열을 지정하며 괄호가 필요합니다.

command

필수 요소입니다지정된 (set) 포함된  파일디렉터리값의 범위 또는 텍스트 문자열에서 수행할 명령을 지정합니다.

CommandLineOptions

지정된 명령과 함께 사용할 명령줄 옵션을 지정합니다.

/?

명령 프롬프트에서 도움말을 표시합니다.

설명

  • for 사용

for 명령은 배치 파일 내에서 사용하거나 명령 프롬프트에서 직접 사용할  있습니다.

  • 배치 매개 변수 사용

다음과 같은 특성이 for 명령에 적용됩니다.

    • for 명령은 command에서 모든 파일을 처리할 때까지 %%variable 또는 %variable 지정된 set  텍스트 문자열로 대체합니다.
    • for variable 이름은 대소문자를 구분하고 전역 변수이며  번에  52 이상을 사용할  없습니다.
    • %0부터 %9 사이의 배치 매개 변수와 충돌하지 않게 하려면 0부터 9까지의 숫자를 제외한 모든 문자를 variable 사용할 있습니다간단한 배치 파일에서는 %%f 같은 단일 문자로 충분합니다.
    • 복잡한 배치 파일에서는 대체 가능한 다른 변수들과 구분하기 위해 variable 여러 값을 사용할  있습니다.
  • 파일 그룹 지정

set 매개 변수는 단일 파일 그룹이나 여러 파일 그룹을 나타낼  있습니다와일드카드(*  ?) 사용하여 파일 집합을 지정할  있습니다.다음은 유효한 파일 집합입니다.

(*.doc)

(*.doc *.txt *.me)

(jan*.doc jan*.rpt feb*.doc feb*.rpt)

(ar??1991.* ap??1991.*)

for 명령을 사용할  set 첫째 값이 %%variable 또는%variable 대체한 다음 지정된 명령을 수행하여  값을 처리합니다set 값에 해당하는 모든 파일이나 파일 그룹이 처리될 때까지  과정은 계속됩니다.

  • in do 키워드 사용

in do 매개 변수는 아니지만 for 명령에 필요합니다 키워드  하나를 생략하면 오류 메시지가 나타납니다.

  • for 추가 형식 사용

명령 확장을 사용하면(기본값다음과 같은 for 명령의 추가 형식이 지원됩니다.

    • 디렉터리 전용

set 와일드카드(*  ?) 포함하면 지정된 command 지정된 디렉터리의 파일 집합 대신 set 일치하는  디렉터리에 대해 실행됩니다구문은 다음과 같습니다.

for /D {%% | %}variable in (set) do command [CommandLineOptions]

    • 재귀적 사용

[Drive:]Path에서 시작하는 디렉터리 트리를 검색하고 트리의  디렉터리에서 for 문을 실행합니다/R 다음에 디렉터리를 지정하지 않으면 현재 디렉터리로 간주됩니다set 마침표(.) 하나만 있으면 디렉터리 트리를 열거만 합니다구문은 다음과 같습니다.

for /R [[Drive :]Path] {%% | %}variable in (set) do command [CommandLineOptions]

    • 값의 범위 반복

반복 변수를 사용하여 시작 (start#) 설정한 다음 값이 집합의 종료 (end#) 초과할 때까지 값의 집합 범위를 단계적으로 검사합니다/L  start# end# 비교하여 반복을 실행합니다start# end#보다 작으면 명령이 실행됩니다반복 변수가 end# 초과하면 명령 셸은 루프를 종료합니다또한 음의 step# 사용하면 값을 줄이면서 범위를 단계적으로 검사할  있습니다예를 들어, (1,1,5) 시퀀스 1 2 3 4 5 생성하고 (5,-1,1) 시퀀스 (5 4 3 2 1) 생성합니다구문은 다음과 같습니다.

for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]

    • 반복  파일 구문 분석

파일 구문 분석을 사용하여 명령 출력문자열  파일 내용을 처리합니다반복 변수를 사용하여 검사할 내용이나 문자열을 정의하고 다양한 ParsingKeywords 옵션을 사용하여 구문 분석을  자세히 수정합니다ParsingKeywords token 옵션을 사용하여 반복 변수로 전달할 토큰을 지정합니다. token 옵션 없이 사용하면 /F 첫째 토큰을 검사만 합니다.

파일 구문 분석을 출력하고 문자열이나 파일 내용을 읽고 개별 텍스트 줄로 분리한 다음  줄을 0 이상의 토큰으로 구문 분석하는 과정으로 이루어집니다그런 다음 반복 변수 값을 토큰으로 설정하여 for 루프를 호출합니다기본적으로 /F  파일의  줄에서 처음 공백으로 분리된 토큰을 전달하며  줄은 건너뜁니다다른 구문은 다음과 같습니다.

for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]

for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]

for /F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]

filenameset 인수는 하나 이상의 파일 이름을 지정합니다filenameset 다음 파일로 진행하기 전에  파일을 열어서 읽고 처리합니다기본 구문 분석 동작을 무시하려면 "ParsingKeywords" 지정합니다이것은 다른 구문 분석 옵션을 지정하는 하나 이상의 키워드를 포함하는 따옴표 붙은 문자열입니다.

usebackq 옵션을 사용하는 경우에는 다음 구문  하나를 사용하십시오.

for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]

for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]

for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]

다음 표에서는 ParsingKeywords 사용할  있는 구문 분석 키워드 목록을 보여 줍니다.

키워드

설명

eol=c

줄의 끝 문자(한 개의 문자만)를 지정합니다.

skip=n

파일의 시작 위치에서 건너뛸 줄 수를 지정합니다.

delims=xxx

구분 기호 집합을 지정합니다. 이 집합은 공백과 탭의 기본 구분 기호 집합을 대체합니다.

tokens=x,y,m-n

각 반복에 대해 for 본문으로 전달할 각 줄의 토큰을 지정합니다. 따라서 추가 변수 이름이 할당됩니다. m-n 형식은m부터 n 사이 토큰을 지정하는 범위입니다. tokens= 문자열의 마지막 문자가 별표(*)이면 추가 변수가 할당되고 마지막으로 구문 분석한 토큰 뒤에 줄에 남아 있는 텍스트를 받습니다.

usebackq

따옴표를 사용하여 filenameset에 파일 이름을 인용하고 따옴표 분은 문장 내 문자열을 명령으로 실행하며, 작은 따옴표 내 문자열은 리터럴 문자열 명령이 되도록 지정합니다.

    • 변수 대체

for 변수 참조를 위한 대체 수정자가 개선되었습니다다음 표에서는 변수 I 대한 옵션 구문 목록을 보여 줍니다.

수정자가 있는 변수

설명

%~I

따옴표("")를 제거하는 %I을 확장합니다.

%~fI

전체 경로 이름으로 %I을 확장합니다.

%~dI

드라이브 문자 전용으로 %I을 확장합니다.

%~pI

경로 전용으로 %I을 확장합니다.

%~nI

파일 이름 전용으로 %I을 확장합니다.

%~xI

파일 확장명 전용 %I을 확장합니다.

%~sI

짧은 이름만 포함하도록 경로를 확장합니다.

%~aI

파일의 파일 특성으로 %I을 확장합니다.

%~tI

파일의 날짜/시간으로 %I을 확장합니다.

%~zI

파일 크기로 %I을 확장합니다.

%~$PATH:I

PATH 환경 변수 목록에 나열된 디렉터리를 검색하고 처음으로 찾은 디렉터리의 전체 이름으로 %I을 확장합니다. 환경 변수 이름이 정의되어 있지 않거나 검색으로 파일을 찾을 수 없으면 이 수정자는 빈 문자열로 확장됩니다.

다음 표에서는 복합 결과를 얻는  사용할  있는 수정자 조합 목록을 보여 줍니다.

조합 수정자가 있는 변수

설명

%~dpI

드라이브 문자 및 경로 전용으로 %I을 확장합니다.

%~nxI

파일 이름 및 확장명 전용으로 %I을 확장합니다.

%~fsI

이름이 짧은 전체 경로 이름 전용으로 %I을 확장합니다.

%~dp$PATH:I

%I에서 PATH 환경 변수의 디렉터리 목록에 나열된 디렉터리를 검색하고 처음으로 찾은 드라이브 문자와 경로로 확장합니다.

%~ftzaI

dir과 같은 출력 줄로 %I을 확장합니다.

위의 예제에서 %I PATH 다른 유효한 값으로 바꿀  있습니다유효한 for 변수 이름은 %~ syntax 종료합니다.

%I 같은 대문자 변수 이름을 사용하면 코드를  읽기 쉽게 만들고 대소문자를 구분하지 않는 수정자와 혼동을 피할  있습니다.

  • 문자열 구문 분석

괄호 사이에 있는 filenameset 작은 따옴표('filenameset') 사용하면 해당 문자열에서 for /F 구문 분석 로직을 사용할  있습니다.Filenameset 파일에서  줄의 입력으로 처리되며 구분 분석됩니다.

  • 출력 구문 분석

for /F 명령을 사용하면 괄호 사이의 filenameset 억음 악센트 기호를 사용하여 명령 출력을 구문 분석할  있습니다이것은 하위Cmd.exe 전달되는 명령줄로 처리되고 출력은 메모리에 캡처되어 파일처럼 구문 분석됩니다.

예제

배치 파일에서 for 명령을 사용하려면 다음 구문을 사용하십시오.

for %%variable in (set) do command [CommandLineOptions]

대체할  있는 변수 %f 사용하여 현재 디렉터리에 확장명이 .doc .txt 모든 파일의 내용을 표시하려면 다음을 입력하십시오.

for %f in (*.doc *.txt) do type %f

위의 예제에서 확장명이 .doc .txt 현재 디렉터리의  파일은 모든 파일의 내용이 표시될 때까지 %f 변수로 대체됩니다배치 파일에서  명령을 사용하려면 모든 %f  %%f 바꾸십시오그렇지 않으면 변수는 무시되고 오류 메시지가 표시됩니다.

주석 처리된 줄을 무시하고 파일을 구문 분석하려면 다음을 입력하십시오.

for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

 명령은 Myfile.txt 파일에서 세미콜론으로 시작하는 줄은 무시하고  줄을 구문 분석하여  줄에서  번째와  번째 토큰을 FOR 본문으로 전달합니다  토큰은 쉼표나 공백으로 구분됩니다FOR 문의 본문은 %i 참조하여  번째 토큰을 얻고%j 참조하여  번째 토큰을 얻으며,%k 참조하여  번째 이후의 나머지 토큰을 모두 얻습니다제공한 파일 이름에 공백이 있으면 텍스트에 따옴표를 사용하십시오("File Name").따옴표를 사용하려면 usebackq 사용해야 합니다그렇지 않으면 따옴표는 구문 분석할 리터럴 문자열로 해석됩니다.

%i FOR 문에서 명시적으로 선언되고 %j %k tokens= 옵션을 사용하여 함축적으로 선언됩니다문자 'z' 'Z'보다  변수를 선언하지 않는다는 조건으로 tokens= 사용하면 토큰은 최대 26개까지 정의할  있습니다.

괄호 사이에 filenameset 넣어 명령 출력을 구문 분석하려면 다음을 입력하십시오.

for /F "usebackq delims==" %i IN (`set`) DO @echo %i

 예제는 현재 환경의 환경 변수 이름을 열거합니다.


 

 

컴퓨터 이름 확인

set

명령을 타이핑하고 엔터키를 치면 됩니다그러면 현재의 모든 환경 변수들이 한꺼번에 출력되는데 중에서 COMPUTERNAME 이라는 환경변수를보면 예를 들어

COMPUTERNAME=COOLBOY-BIDD6RA

이런 식으로 출력될 것입니다위의 경우는 컴퓨터이름이 COOLBOY-BIDD6RA  경우입니다.


배치파일 안에서 쓰기 위해컴퓨터 이름만 출력하려면

echo %COMPUTERNAME%

이렇게 하면 컴퓨터 이름만 COOLBOY-BIDD6RA 이렇게 출력됩니다환경변수명 앞뒤로 퍼센트 기호를 붙이면 환경변수의 값을 불러내어 사용할 있습니다.

 

사용자 문자열 입력받기입력을 변수에 저장

배치 파일 안에서사용자로부터 어떤 문자열을 입력받아야 할 때에는

 

set /p <변수명>=

 

이라는 명령어를 사용하면 됩니다윈도우2000/XP이상에서만 되고윈도우98에서는 되지 않습니다.

 

키보드로부터 문자열 입력 받기 예제

 

파일명: 0.bat

@echo off

setlocal

 

set /p str=아무 문자열이나 입력하세요:

 

echo 방금 입력하신 문자열은 %str% 입니다.

 

 

사용자가 키보드로 입력한 문자열이 str 이라는 변수에 저장됩니다변수에서 값을 꺼낼 때에는 %str% 이렇게 퍼센트 기호를 앞뒤로 붙입니다.

 

set /p str=

이렇게 하면 아무 문자열이나 입력하세요라는 문자열이 나타나지 않습니다.

 

 

실행 결과:

D:\Z>0.bat

아무 문자열이나 입력하세요:ABC

방금 입력하신 문자열은 ABC 입니다.

 

ABC 라는 문자열을 입력한 결과입니다.

 

 

이것은 좀더 실용적인 예제입니다사용자가 문자열을 입력하지 않고 그냥 엔터키만 누를 경우다시 입력받도록 합니다.

@echo off

setlocal

 

:: str 변수 초기화

set str=

 

 

:REDO

set /p str=문자열 입력하세요:

if "%str%" == "" goto REDO

 

 

echo 방금 입력하신 문자열은 %str% 입니다.

 

 

str 이라는 변수에 혹시 어떤 값이 이미 들어 있을 경우에는 문제가 생기므로 "set str=" 이렇게 변수를 초기화했습니다실은 초기화라기보다는 str 이라는 변수를 삭제한 것입니다.

간단히 Y/N 만 묻는 방법은 여기에 있습니다: ▶▶ 배치파일] Yes / No 선택 묻기도스의 CHOICE 명령 대용사용자 입력 받기 - DOS-Windows Batch File

 

 

 

영문도스 한글도스 확인 및 변경

그리고 배치파일 안에서 문자열을 직접 입력받는 것보다, "실행시 옵션"으로서 문자열을 입력받는 것이 훨씬 더 편리합니다여기에 방법이 있습니다: ▶▶ 배치파일옵션 문자열 얻기실행시 매개변수 활용 DOS-NT Batch File Option

 

 

윈도우에서 도스창을 실행하면 기본적으로 항상 "한글 도스"가 나옵니다코드 페이지 전환 명령을 사용하면 영문 도스 상태로 바꾸기가 됩니다이러면 도스 명령어의 메세지나 도움말이 영어로 나오게 됩니다.

 

윈도우에서 도스창(명령 프롬프트;CMD.EXE) 을 열고

 

CHCP 437

 

이라는 명령어를 주면 영문 도스로 변경됩니다.

 

 

한글 도스로 다시 돌아오기 위해서는

 

CHCP 949

 


 

 

배치 파일 내에 문법 사용 방법

1. CALL

 현재 실행중인 배치 파일을 종료하지 않고 필요한 다른 배치파일을 호출하여 실행한 다음 원래의 배치파일로 다시 돌아오려고 할 때 사용됩니다.

 

◇ 사용법 : Call [drive:]\[경로]\<배치파일명>[.BAT]

 

◇ 예 : Call c:\bats\sample.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:\work\temp.$$$ del d:\work\temp.$$$

 

◇ 설명 :

직전에 실행한 명령의 종료 코드가 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 ☜똑같이 입력하고 실행후 확인.


 

 

tasklist – 프로세스 항목 나열

tasklist

실행중인 프로세스 항목을 나열한다.

 

taskkill – 프로세스 강제 종료

TASKKILL [/S 시스템 [/U 사용자 이름 [/P [암호]]]]

         { [/FI 필터] [/PID 프로세스 id | /IM 이미지 이름] } [/T] [/F]

 

설명:

    이 도구는 프로세스 ID(PID) 또는 이미지 이름으로 작업을 종료하는 데

    사용합니다.

 

매개 변수 목록:

    /S    시스템           연결할 원격 시스템을 지정합니다.

 

    /U    [도메인\]사용자  명령을 실행해야 하는 사용자 컨텍스트를

                           지정합니다.

 

    /P    [암호]           해당 사용자 컨텍스트의 암호를 지정합니다.

                           생략한 경우에는 물어봅니다.

 

    /FI   필터             작업 집합을 선택하는 필터를 적용합니다.

                           "*"를 사용할 수 있습니다: imagename eq acme*

 

    /PID  프로세스_ID      종료할 프로세스의 PID를 지정합니다.

                           TaskList를 사용하여 PID를 얻을 수 있습니다.

 

    /IM   이미지 이름      종료할 프로세스의 이미지 이름을

                           지정합니다와일드카드 문자 '*'를 사용하여

                           모든 작업 또는 이미지 이름을 지정할 수 있습니다.

 

    /T                     지정된 프로세스와 그 프로세스로부터 시작된

                           모든 자식 프로세스를 종료합니다.

 

    /F                     프로세스를 강제로 종료하도록 지정합니다.

 

    /?                     이 도움말 메시지를 표시합니다.

 

필터:

    필터 이름     유효한 연산자             유효한 값

    -----------   ---------------           -------------------------

    STATUS        eq, ne                    RUNNING |

                                            NOT RESPONDING | UNKNOWN

    IMAGENAME     eq, ne                    이미지 이름

    PID           eq, ne, gt, lt, ge, le    PID 

    SESSION       eq, ne, gt, lt, ge, le    세션 번호.

    CPUTIME       eq, ne, gt, lt, ge, le    CPU 시간 형식

                                            hh:mm:ss

                                            hh - 시간,

                                            mm - , ss - 

    MEMUSAGE      eq, ne, gt, lt, ge, le    메모리 사용(KB)

    USERNAME      eq, ne                    사용자 이름([domain\]user

                                            형식)

    MODULES       eq, ne                    DLL 이름

    SERVICES      eq, ne                    서비스 이름

    WINDOWTITLE   eq, ne                    창 제목

 

    참고

    ----

    1) /IM 스위치에 대한 와일드카드 문자 '*'는 필터가 적용될 때만

    사용할 수 있습니다.

    2) 원격 프로세스는 항상 강제적으로(/F) 종료될 수 있습니다.

    3) 원격 컴퓨터가 지정되면 "WINDOWTITLE"   "STATUS" 필터는

       지원되지 않습니다.

 

:

TASKKILL /f /im naver*      // naver로 시작하는 프로세스 전부 죽이기

    TASKKILL /IM notepad.exe

    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T

    TASKKILL /F /IM cmd.exe /T

    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"

    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe

    TASKKILL /S 시스템 /U domain\username /FI "USERNAME ne NT*" /IM *

    TASKKILL /S 시스템 /U 사용자 이름 /P 암호 /FI "IMAGENAME eq note*"


 

 

SET 명령어

cmd.exe 환경 변수를 보여주거나 설정하거나 지웁니다.

 

SET [변수=[문자열]]

 

  변수      환경 변수 이름을 지정합니다.

  문자열    변수에 할당할 문자열을 지정합니다.

 

매개 변수 없이 'SET'이라고 입력하면현재 환경 변수를 볼 수 있습니다.

명령 확장을 사용하면 SET는 아래와 같이 바뀝니다.

SET 명령은 변수 이름만으로 호출되며, = 기호나 값으로 그 변수의 값을 표시하지는 않습니다예를 들어,

 

    SET P

 

는 문자 'P'로 시작되는 모든 변수를 표시합니다.

SET 명령은 변수 이름을 현재 환경에서 찾을 수 없으면 ERRORLEVEL 1로 설정합니다.

SET 명령에서는 환경 변수 이름에 = 기호를 사용할 수 없습니다.

SET 명령에는 아래와 같이 새로운 두 개의 스위치가 추가됩니다.

 

    SET /A 표현식

    SET /P 변수=[promptString]

 

/A 스위치는 = 기호의 오른쪽에 있는 문자열이 수식임을 지정합니다이는 계산되어 문자열로 변환되거나 지정한 변수의 새 값으로 만들어진 결과입니다표현식 평가기는 매우 간단하며 아래 연산을 지원합니다.

 

    ()          - 그룹 짓기

    ! ~ -               - 단일 연산자

    * / %               -  산술 연산자

    + -                 - 산술 연산자

    << >>               - 논리 이동

                       - 비트단위 and

    ^                   - 비트단위 상호 배제 or

    |                   - 비트단위 or

    = *= /= %= += -=    - 할당

      &= ^= |= <<= >>=

    ,                   - 식 구분 기호

 

논리 연산자를 사용하면 표현식 문자열을 인용 부호로 묶어야 합니다.  표현식에서 숫자가 아닌 문자열은 환경 변수 문자열로 취급하며,그 값은 사용하기 전에 숫자로 변환됩니다환경 변수 이름이 지정되었지만 현재 환경에서 정의되지 않았으면 0 값이 사용됩니다.

이렇게 하면 환경 변수 값을 가져오기 위해 % 기호를 모두 입력할 필요 없이 환경 변수 값으로 산술 연산을 수행할 수 있습니다명령 스크립트 밖의 명령줄에서 SET /A를 실행하면표현식의 마지막 값이 표시됩니다할당 연산자의 왼쪽에 환경 변수 이름이 있어야 합니다숫자 값은 아무 접두어가 없으면 십진수이며접두어 0x 16진수, 0 8진수를 나타냅니다그러므로 0x12, 18  022와 같습니다. 8진수는 혼동될 수 있다는 것에 주의하십시오: 08 09 8, 9가 올바른 8진수가 아니므로 잘못된 수 입니다.

 

/P 스위치는 변수의 값을 사용자가 입력한 입력 줄에 설정하도록 허용합니다입력 줄을 읽기 전에 지정한 promptString을 표시합니다. PromptString을 비워 둘 수 있습니다.

환경 변수 대체를 다음과 같이 확장했습니다:

 

    %PATH:str1=str2%

 

() "str2" 문자열을 가진 확장된 결과에 나타나는 각 "str1" 문자열을 대체하는 PATH 환경 변수를 확장합니다확장된 출력에 나타나는 모든 "str1" 문자열을 효과적으로 삭제하기 위해 "str2" 문자열을 비어둘 수 있습니다. "str1" 문자열이 별표(*)로 시작할 수 있습니다이 경우에는 확장된 출력의 시작 부분에서부터 str1의 나머지 부분의 첫 문자열까지의 모든 문자열을 일치시킵니다.

또한 확장용 하위 문자열을 지정할 수 있습니다.

 

    %PATH:~10,5%

 

() PATH 환경 변수를 확장한 다음 확장된 결과의 11(10 오프세트)번째 문자에서 시작한 5 문자만 사용합니다길이를 지정하지 않으면 기본값을 변수 값의 나머지로 지정합니다(오프세트 또는 길이수 모두 음수이면사용한 수는 오프세트 또는 지정한 길이에 추가된 환경 변수 값의

길이입니다.

 

    %PATH:~-10%

 

() PATH 변수의 마지막 10 문자를 추출합니다.

 

    %PATH:~0,-2%

 

() PATH 변수의 2 문자만 제외한 모든 문자를 추출합니다.

지연된 환경 변수 확장명에 대한 지원이 추가되었습니다.  이 지원은 항상 기본적으로 사용할 수 없지만 /V 명령줄을 CMD.EXD로 전환하여 사용할 수 있거나 사용할 수 없게 될 수 있습니다.  CMD /?를 참조하십시오.

지연된 환경 변수 확장명은 텍스트의 줄을 실행할 때가 아니라 읽을 때 발생한 현재 확장명의 한계를 극복하는데 유용합니다.  다음 예제는 직접 변수 확장명에 나타나는 문제를 보여줍니다:

 

    set VAR=before

    if "%VAR%" == "before" (

        set VAR=after

        if "%VAR%" == "after" @echo If you see this, it worked

    )

 

양쪽 IF 설명에 있는 %VAR%가 첫 번째 IF 설명을 읽을 때 대체되고 논리적으로 복합문인 IF의 본문을 포함하기 때문에 메시지를 표시하지 않습니다그래서 복합문에 있는 IF가 결코 같을 수 없는 "before" "after"를 비교하고 있습니다.  유사하게다음 예제는 예상한 것처럼 작업하지 않습니다:

 

    set LIST=

    for %i in (*) do set LIST=%LIST% %i

    echo %LIST%

 

현재 디렉터리에 파일 목록을 만들지 않지만대신 LIST 변수를 최근에 찾은 파일에 설정합니다다신 한번이것은 %LIST% 변수가 FOR설명을 읽을 때 한번 확장되었고 그때 LIST 변수가 비었기 때문입니다실행하고 있는 실제 FOR loop:

 

    for %i in (*) do set LIST= %i

 

이것은 LIST를 최근에 찾은 파일에 설정합니다.  지연된 환경 변수 확장명은 실행 시간에 환경 변수를 확장하도록 다른 문자(느낌표)를 사용하도록 허용합니다.  지연된 변수 확장명을 사용할 수 있으면위의 예제가 의도된 대로 다음과 같이 작업하도록 쓰여질 수 있습니다:

 

    set VAR=before

    if "%VAR%" == "before" (

        set VAR=after

        if "!VAR!" == "after" @echo 이렇게 되면

    )

 

    set LIST=

    for %i in (*) do set LIST=!LIST! %i

    echo %LIST%

 

명령 확장을 사용하면 확장될 수 있으나 SET에 의해 표시되는 변수 목록에 나타나지 않는 몇몇의

동적 환경 변수가 있습니다이 변수 값은 변수 값이 확장될 때마다 동적으로 계산됩니다사용자가 변수를 이 이름 중 하나로 분명하게 정의하면 이 정의가 아래에 설명된 동적 변수를 무시합니다:

 

%CD% - 현재 디렉터리 문자열로 확장합니다.

%DATE% - DATE 명령과 같은 포맷을 사용하여 현재 날짜로 확장합니다.

%TIME% - TIME 명령과 같은 포맷을 사용하여 현재 시간으로 확장합니다.

%RANDOM% - 0 32767 사이에 있는 임의 숫자로 확장합니다.

%ERRORLEVEL% - 현재 ERRPRLEVEL 값으로 확장합니다

%CMDEXTVERSION% - 현재 명령 프로세서 확장자 버전 번호로 확장합니다.

%CMDCMDLINE% - 명령 프로세서를 호출하는 원본 명령줄로 확장합니다.



BAT File 관련 명령어가 너무나 쓸만하네요~ 후후~