[명령어1]
1. REM : 주석
2. PAUSE : 배치파일 실행중 일시 멈추게함.
화면에 'Press any key to continue...'
(계속하려면 아무키나 누르세요)
배치실행을 중단하려면 Ctrl+C키를 누른다. 그러면 화면에
'Terminate batch job (Y/N)?'
(배치작업을 끝내겠읍니까?) Yes / No
3. 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
[명령어2]
1. BEEP
[형식] BEEP 주파수 시간
[목적] PC의 내부 스피커를 울리기 위한 명령어
[내용] 주파수의 표기는 Hertz. (Hertz : 1/18초)
[예] c:> beep 440 4 600 2 1040 6
2. CALL
[형식] CALL [drive:][path]filename(Batch File)
[목적] 배치 파일 수행 중에 다른 배치 파일을 불러서 수행한다.
[내용] 배치 파일을 작성해 본 사람은 알겠지만, 도스상에서도
배치 파일 수행 중에 다른 배치 파일을 불러서 수행 할 수
있다. 단, 4DOS가 지원하는 루프 문은 4레벨까지이다.
[예] if "%1" == "play" call start.btm
위의 예는 처음의 변수가 play이면 start.btm이라는
배치 파일을 수행하라는 명령이다.
3. CANCEL
[형식] CANCEL
[목적] 배치 파일의 수행을 중지한다.
[내용] 배치 파일의 수행을 중지시키는 명령어로써 배치 파일 내의
어느 곳에서나 사용할 수 있다.
[예] if not "%1" == "okay" cancel
위의 예는 처음의 변수가 okay가 아니면 배치 파일의 수행을
중지하라는 명령문이다.
4. DELAY
[형식] DELAY [seconds]
[목적] 지정된 시간(초)만큼 지연하라는 명령이다.
[내용] 긴 배치 파일의 실행 중 에러 여부를 판단하는데 사용되는 명령
이기도 하고, 실행 중 지연이 필요한 부분에 사용하는 명령이다.
뒤에 시간을 생략하면 1초동안 기다린다.
delay 명령 수행중에 <Ctrl>+<C>를 누르면 다음 명령문을
수행한다.
[예] delay 10
5. DRAWBOX
[형식] DRAWBOX ulrow ulcol lrrow lrcol style [bright][blink] fg ON
bg [FILLbgfill]
[목적] 화면에 사각형을 그린다.
[내용] ulrow : 좌상단 행 좌표값
ulcol : 좌상단 열 좌표값
lrrow : 우하단 행 좌표값
lrcol : 우하단 열 좌표값
style : 선의 모양
0 ===> 선 없음.
1 ===> 단선.
2 ===> 복선.
3 ===> 위아래 단선, 좌우 복선
4 ===> 위아래 복선, 좌우 단선
bright : 밝은 속성 부여.
blink : 깜박임 속성 부여.
fg : 선의 색상.
bg : 선 외의 색상.
bgfill : 텍스트 범위에 색상.
이 명령은 박스를 그리는 데 유용한 명령이다. 주의할 것은
이 명령을 사용해 그려지는 열이나 행에 글자가 있다면 그 글은
지워지게 되므로 주의하기 바란다.
사용 가능 행은 0 - 24, 사용 가능 열은 0 - 79까지이다.
색상을 지정하는 데 있어서는 앞에서 3글자까지만 지정해도
된다. 표현 가능한 색상수는 다음과 같다.
Black(흑색) Blue(청색) Green(녹색) Red(적색)
Magenta(심홍색) Cyan(청록색) Yellow(노란색) White(백색)
이 명령은 다음에 나올 DRAWHLINE, DRAWVLINE과 적절히 조화
시켜 사용하면 사용자의 노력에 따라 상당히 훌륭한 화면 구성을
할 수 있다.
참고로, 버젼 중에 색상 출력이 잘 되지 않는 것이 있으므로
먼저 다음의 예로 색이 제대로 출력이 되는 지 확인하기 바란다.
[예] drawbox 0 0 24 79 1 bri whi on blu fill blu
단선을 이용해 파란 바탕에 하얀 선을 출력한다.
6. DRAWHLINE
[형식] DRAWHLINE row col len style [bright] [blink] fg ON bg
[목적] 화면에 수평선을 긋는다.
[내용] 이 명령은 앞의 drawbox 명령과는 달리 화면에 문자가 쓰여져
있어도 전혀 영향을 받지 않고 그릴 수 있다.
row : 행 좌표
col : 열 좌표
len : 수평선의 길이
style : 선의 형태
0 ===> 단선
1 ===> 복선
fg : 선의 색상
bg : 선 외의 색상
DRAWBOX 명령도 마찬가지이지로 색상을 지정하는
단어는 앞에서 3글자까지만 사용해도 된다.
사용 가능 색상은 DRAWBOX와 동일하다.
[예] drawhline 0 0 79 2 green on blue
복선을 사용하여 좌상단에서 우상단까지 수평선을 긋는다.
7. DRAWVLINE
[형식] DRAWVLINE row col len style [bright] [blink] fg ON bg
[목적] 화면에 수직선을 긋는다.
[내용] 모든 것이 drawhline 명령과 동일하다.
[예] drawvline 0 0 24 2 bri red on bla
복선을 사용하여 좌상단에서 좌하단까지 수직선을 긋는다.
8. ENDLOCAL
[형식] ENDLOCAL
[목적] SETLOCAL 명령에 의해 보관된 현재의 패스(path), 환경변수,
ALIAS를 복구한다.
[내용] SETLOCAL과 ENDLOCAL은 배치 파일에서만 사용할 수 있으며,
ALIAS에서는 사용할 수 없다.
배치 파일 상에서 끝날 때 이 명령이 없다면 4DOS(NDOS)는
자동적으로 이 명령을 내린다.
[예] setlocal
cdd d:gameindy
set pktmp = e:temp
set path = %path%;c:ut;
indy.exe/a
endlocal
위의 예문은 현재의 드라이브, 디렉토리, 환경변수, alias를
보관하고 현재의 드라이브와 환경변수를 변경하고, 자동차 게임
을 실행한 뒤 원래의 보관된 값을 다시 복구하라는 배치 파일
내(반드시 배치 파일 내)의 일부분의 명령이다.
9. GOSUB
[형식] GOSUB label
[목적] 배치 파일의 수행 중에 서브 루틴을 호출한다.
[내용] gosub 명령어는 단독으로 사용될 수 없으며 반드시 뒤에 레이블
명이 같이 와야 한다. 이 명령은 뒤의 호출된 서브 루틴을 찾아
가는 명령이다. 그리고 또 한가지 중요한 것은 호출된 서브 루틴
의 마지막 부분에는 반드시 return 명령이 있어야 된다. return
명령이 없다면 프로그램 수행에 결정적인 에러를 유발한다.
꼭 gosub와 return은 항상 붙어 다니는 명령이라는 것을 유념하기
바란다.
그리고, 지정한 레이블을 찾을 수 없으면 레이블을 찾지 못했다는
메세지가 나타난다. 레이블은 이름 앞에 콜론(:)을 꼭 붙인다.
뒤의 GOTO 명령과 비교하라.
[예] (배치 파일의 일부분)
:start
명령문1
명령문2
gosub back
명령문3
.
.
.
:back
과정..
.
return
위의 예문은 start 루틴에서 명령문1, 2를 진행하고 back 루틴을
호출하라는 gosub 명령을 만났을 경우이다. back 루틴에서 과정을
수행한 후에 다시 start 루틴의 gosub back 다음의 명령문3을 실행
하게 된다.
10. GOTO
[형식] GOTO label
[목적] 특정 레이블로 이동하기 위해서 사용한다.
[내용] goto 명령은 원하는 레이블로 제어권을 옮길시에 사용한다.
보통 조건문과 같은 참, 거짓을 판별하는 문과 같이 쓰여서 참,
거짓에 따라 다른 레이블로 가서 수행을 하기 위해 사용된다.
가고자하는 레이블은 반드시 존재해야 한다. 참고로, 4DOS(NDOS)
는 레이블명의 대소문자를 구별하지 않는다.
[예] if exist readme.txt goto hlist
echo Can't find README.TXT file.
goto exit
.
.
:hlist
hlist readme.txt
goto exit
.
.
:exit
quit
위의 예문은 지금 디렉토리에서 readme.txt라는 파일이 존재하면
hlist라는 레이블명을 찾아가라는 것이다. 만약 존재하지 않으면
Can't find README.TXT file. 이라는 에러 메세지를 내고 종료하게
된다.
11. IF
[형식] IF [NOT] condition command
[목적] 조건문의 참, 거짓을 판단하여 결과에 따라 실행한다.
[내용] 이 명령어는 다중 루프문(if문 안에 다시 if문을 사용하는
것을 말함)을 지원하며, not을 사용하면 조건식을 반대로
해석하고 실행한다. 조건식이 옳으면 바로 뒤의 명령을
수행하고, 거짓이면 뒤의 명령은 무시하고 다음 줄로 내려
가서 명령을 실행한다.
조건식에서 대소문자 구별은 하지 않으며, 문자열은 "로
앞뒤에 써줘야 한다.
그리고, 조건식은 다음과 같이 나타낼 수 있다.
string1 == string2
string1 EQ string2
두개의 문자열이 같다는 것을 의미한다.
string1 NE string2
두개의 문자열이 다르다는 것을 의미한다.
string1 LT string2
string1 < string2를 의미한다.
string1 LE string2
string1 <= string2를 의미한다.
string1 GT string2
string1 > string2를 의미한다.
string1 GE string2
string1 >= string2를 의미한다.
그리고, 한가지 초보자가 자주 틀리는 부분이 두개의 문자
열이 같다는 의미의 표시인 ==을 종종 = 하나만 사용한다는
점이다. 이것만 주의하면 어려운 것은 없다고 본다.
다음은 조건식 대신에 쓰이는 명령어들이다. 여기서는 자주
쓰이는 (4DOS에서) 명령어들만 나타냈다.
1) DOSMEM condition n[K]
현재 사용 가능한 도스의 메모리 양을 검사한다.
2) ERRORLEVEL [condition] n
MS-DOS에서도 사용되는 명령어로써 프로그램이 종결되면서
도스에게 되돌려 주는 값에 의하여 다른 명령을 실행할 지를
판단한다. 조건식이 없다면 4도스는 크거나 같다고 인식하고
그 결과에 따라 실행한다.
참고로, 일반적으로 도스 외부 명령어들은 실행 후 그 결과
값을 수치로 되돌려주지만, 여타 다른 프로그램들 중에는
이런 값들을 돌려 주지 않는 프로그램도 있으므로 사용하는
프로그램에 대해 이런 정보를 가지고 있어야 한다.
3) EXIST [drive:][path]filename
지정된 파일의 존재여부를 판단한다. 파일명에 와일드 카드 문자
의 사용이 가능하다.
4) ISALIAS aliasname
지정된 알리아스의 존재여부를 판단한다. 존재하면 참이다.
5) MONITOR [MONO|COLOR]
화면의 칼러 여부를 조사한다.
6) VIDEO [MONO|CGA|EGA|VGA]
그래픽 카드의 존재여부를 확인한다.
이상으로 IF문에 대해서 알아보았다. 다음에 나오는 IFF문과
비교해보라.
[예] if dosfree gt 550K echo More than 550Kbyte free memory.
도스의 사용 가능한 메모리를 조사하여 550Kbyte보다 크면
More than 550Kbyte free memory.라는 메세지를 내보낸다.
12. IFF
[형식] IFF [NOT] condition THEN ^...^ ELSE[[IFF]...THEN]^...^ENDIFF
[목적] IF문과 거의 동일.
[내용] IFF문은 베이직의 다중 FOR..NEXT문과 같다고 생각하면 된다.
IFF 명령어는 조건이 참이면 THEN 뒤의 명령어를 실행하고,
거짓이면 ELSE나 ELSEIFF, ENDIFF문을 실행한다.
IFF 명령어로 15개까지의 다중 루프가 가능하다.
형식에서 캐럿문자(^)는 6번키 위에 있는 문자로써 명령을 구분
할때 사용한다. 캐럿문자 다음의 명령어는 단독으로 실행된다고
생각하면 된다.
[예] 다음은 ALIAS 중에 TOP이라는 ALIAS가 있다면 그 기능을 해제하며
만약 없다면 TOP라는 ALIAS를 정의하는 예문이다.
iff isalias top then^unalias top^else^alias top cd^endiff
13. INKEY
[형식] INKEY [/Wn] [text] %%var
[목적] 입력장치로부터 하나의 문자나 숫자를 읽는다.
(1바이트 기준, 영어 스펠 하나)
[내용] text : 화면에 나타낼 문자열.
/Wn : 입력을 받고 n초동안 기다린다. 만일 n이 0이라면
키입력을 받는 즉시 입력된 값을 변수값(%%var)에
대입한다.
아스키 코드로 표현할 수 없는 펑션키등은 @뒤에
10진수를 써주면 된다. 예를 들어 F5키는 @63이다.
뒤에 나오는 INPUT 명령과 함께 배치 파일 내에서
사용하면 사용자로부터 키입력을 받을 수 있다. MS
-DOS에 포함된 외부 명령어 choice.com과 비슷한 기능
을 한다. 하지만 4DOS(NDOS)는 이것을 배치 파일 내부
명령어로써 지원한다.
[예] inkey Which number that you want...? %%num
이것은 화면에 메세지를 보내고 사용자가 입력한 값을
변수 num에 대입하라는 예문이다.
14. INPUT
[형식] INPUT [/Wn] [text] %%var
[목적] 입력장치로부터 문자열이나 숫자 등을 받는다.
[내용] 위의 INKEY 명령과 동일하지만 INKEY 명령이 하나의 문자만
입력받는데 비해 INPUT 명령은 문자열도 입력 받을 수 있다.
[예] input Input the filename... %%name
파일명을 입력 받아서 변수 name에 저장하라는 명령이다.
15. KEYSTACK
[형식] KEYSTACK ["abc"][nn][@nn][!]
[목적] 배치 파일이나 ALIAS에서 실행되는 프로그램에 입력값을
전해준다.
[내용] " "로 둘러싸여 있는 문자는 그대로 전해지며, 10진수(nn)는
아스키 코드로 해당되는 문자로 해석된다. (예를 들면, 13은
Enter 값을 나타낸다.) 단, 숫자 0은 키보드 버퍼를 지워버리
는 프로그램에 사용된다. 그리고, 숫자 앞에 @문자가 있는 것
은 확장 코드로써 Alt 키와 같이 눌려진 키, 화살표 키, 기능
키를 나타낸다. !는 KEYSTACK 버퍼와 키보드 버퍼에 들어 있는
모든 키 입력값을 지운다. 참고로, 최대 255문자까지 입력할
수 있다.
KEYSTACK 명령을 사용하기 위해서는 KSTACK.COM이라는 구동
프로그램을 메모리에 띄워야 한다. AUTOEXEC.BAT에 삽입하면
된다.
[예] 다음은 로터스 1-2-3을 실행시킨 후 명령 라인에서 입력된
변수(여기서는 파일명)를 읽어 들이는 배치 파일이다.
pushd d:packlotus
keystack 0 13 0 13 0 13 0 13 0 13 "/fr" 0 "%1" 13
123
popd
16. QUIT
[형식] QUIT
[목적] 배치 파일의 실행을 멈춘다.
[내용] 이 명령을 만나면 배치 파일의 실행을 멈춘다.
CALL문을 사용해 제 2의 배치 파일을 불러서 실행 중이었다면
제 2의 배치 파일에서 이 명령을 만나면 제 1의 배치 파일로
돌아가게 된다. 물론 제 1의 배치 파일에서 이 명령을 만나면
도스 커맨드 상으로 돌아간다.
CANCEL 명령과 다른 점은 CANCEL 명령은 제 2차 배치 파일에서
도 이 명령을 만나면 바로 도스 커맨드 상으로 복귀하게 된다는
점이다.
[예] input Enter the number... <1> - <4> %%num
if "%num" == "4" quit
입력된 값이 4이면 배치 파일의 실행을 멈춘다.
17. RETURN
[형식] RETURN
[목적] GOSUB 명령으로 찾아간 서브 루틴에서 본래의 루틴으로 복귀한다.
[내용] GOSUB 명령 참조.
[예] gosub 예문 참조.
18. SCREEN
[형식] SCREEN row col [text]
[목적] 화면의 한 지점에 커서를 위치 시킨 후 문장을 출력한다.
[내용] 출력하고 싶은 지점에 문장을 나타낸다.
이 명령은 색상 지원을 못한다.
색상출력을 함께 원한다면 다음의 SCRPUT 명령을 사용하라.
[예] 다음은 SCREEN 명령으로 만든 간단한 메뉴이다.
@Echo off
cls
screen 5 15 Which game you want...?
screen 8 20 <1> INDIANAPOLIS 500
screen 9 20 <2> DOOM
screen 10 20 <3> SIMCITY 2000
screen 11 20 <4> SAMKUKJI 3
19. SCRPUT
[형식] SCRPUT row col [bright] [blink] fg ON bg text
[목적] 화면의 한 지점에 색상과 문장을 출력한다.
[내용] SCREEN 명령과 동일하지만 색상 지원을 할 수 있다.
단, 구버젼 사용자는 CONFIG.SYS 파일에 DEVICE=C:DOSANSI.SYS
를 추가해야 한다.
fg : 내부 색상
bg : 외부 색상
사용가능한 색상은 DRAWBOX 명령을 참조하라.
[예] 위의 SCREEN 명령으로 만든 메뉴를 색상을 넣어서 표현한다.
@echo off
cls whi on blu
scrput 5 15 bri whi on blu Which game you want...?
scrput 8 20 bri yel on blu <1> INDIANAPOLIS 500
scrput 9 20 bri red on blu <2> DOOM
scrput 10 20 bri gre on blu <3> SIMCITY 2000
scrput 11 20 bri mag on blu <4> SAMKUKJI 3
20. SETLOCAL
[형식] SETLOCAL
[목적] 현재의 드라이브, 디렉토리, 환경변수, ALIAS를 보관한다.
[내용] 이 명령을 내린 후 현재의 드라이브나 환경변수 등이 바뀌어도
나중에 다시 ENDLOCAL 명령을 내리면 바뀌기 전의 값을 복구할
수 있다. 단, 이 명령은 배치 파일내에서만 사용이 가능하다.
SETLOCAL과 ENDLOCAL 명령은 한 배치 파일내에서 중첩될 수 없
으나 같은 레벨로는 여러번 사용될 수 있다.
주의할 것은 SETLOCAL 명령이 내려진 상태에서 배치 파일내에서
램 상주 프로그램을 실행해서는 안된다. 치명적인 것은 아니지만
메모리의 낭비를 가져온다.
[예] ENDLOCAL 예문 참조.
21. SHIFT
[형식] SHIFT [n]
[목적] 10개 이상의 인수를 배치 파일내에서 사용하고 싶을 때 사용한다.
[내용] COMMAND.COM에도 SHIFT 명령이 있다.
하지만, 4DOS(NDOS)에서는 128개의 인수를 사용할 수 있으므로
SHIFT 명령을 4DOS(NDOS)를 사용하면서 사용할 일은 거의 없을 것
으로 보인다.
SHIFT 명령은 인수의 값을 앞으로 지정한 횟수만큼 옮긴다.
초기치 n값은 1이며, n값에 -를 붙이므로 해서 역으로(뒤로) 인수
값을 전해주는 것도 가능하다.
[예] 다음을 작성한 후 네개 이상의 변수를 주어서 실행해 보라.
echo %1 %2 %3 %4
shift
echo %1 %2 %3 %4
shift 2
echo %1 %2 %3 %4
shift -2
echo %1 %2 %3 %4
22. TEXT
[형식] TEXT
.
.
ENDTEXT
[목적] 화면에 긴 문장을 출력하고 싶을 때 사용한다.
[내용] TEXT 명령의 다음 행부터 나타내고자 하는 문장으로 취급한다.
그리고, 반드시 마지막에 ENDTEXT 명령을 함께 사용해야 한다.
[예] 다음은 TEXT..ENDTEXT를 사용해 메뉴를 작성하는 또 다른 예문
이다.
@echo off
cls
screen 5 0
text
Enter your choice... :
<1> SpreadSheet Program
<2> DataBase Program
<3> WordProcessor Program
<4> Utility Group
<5> Game
Good Luck!!!
endtext
[명령어]
ASSOC 파일 확장명 연결을 보여주거나 수정합니다.
ATTRIB 파일 속성을 표시하거나 바꿉니다.
BREAK 확장된 CTRL+C 검사를 설정하거나 지웁니다.
BOOTCFG 부팅 로딩을 제어하기 위해 boot.ini에서 속성을 설정합니다.
CACLS 파일의 액세스 컨트롤 목록(ACL)을 표시하거나 수정합니다.
CALL 한 일괄 프로그램에서 다른 일괄 프로그램을 호출합니다.
CD 현재 디렉터리 이름을 보여주거나 바꿉니다.
CHCP 활성화된 코드 페이지의 번호를 표시하거나 설정합니다.
CHDIR 현재 디렉터리 이름을 보여주거나 바꿉니다.
CHKDSK 디스크를 검사하고 상태 보고서를 표시합니다.
CHKNTFS 부팅하는 동안 디스크 확인을 화면에 표시하거나 변경합니다.
CLS 화면을 지웁니다.
CMD Windows 명령 인터프리터의 새 인스턴스를 시작합니다.
COLOR 콘솔의 기본색과 배경색을 설정합니다.
COMP 두 개 또는 여러 개의 파일을 비교합니다.
COMPACT NTFS 분할 영역에 있는 파일의 압축을 표시하거나 변경합니다.
CONVERT FAT 볼륨을 NTFS로 변환합니다. 현재 드라이브는 변환할 수 없습니다.
COPY 하나 이상의 파일을 다른 위치로 복사합니다.
DATE 날짜를 보여주거나 설정합니다.
DEL 하나 이상의 파일을 지웁니다.
DIR 디렉터리에 있는 파일과 하위 디렉터리 목록을 보여줍니다.
DISKCOMP 두 플로피 디스크의 내용을 비교합니다.
DISKCOPY 플로피 디스크의 내용을 다른 플로피 디스크로 복사합니다.
DISKPART 디스크 파티션 속성을 표시하거나 구성합니다.
DOSKEY 명령줄을 편집하고, Windows 명령을 다시 호출하고, 매크로를 만듭니다.
DRIVERQUERY 현재 장치 드라이버 상태와 속성을 표시합니다.
ECHO 메시지를 표시하거나 ECHO를 사용 또는 사용하지 않습니다.
ENDLOCAL 일괄 파일에서 환경 변경의 지역화를 끝냅니다.
ERASE 하나 이상의 파일을 지웁니다.
EVENTQUERY 지정된 영역에 대해 이벤트 로그 항목을 표시합니다.
EXIT CMD.EXE 프로그램(명령 인터프리터)을 마칩니다.
FC 두 파일 또는 파일의 집합을 비교하여 다른 점을 표시합니다.
FIND 파일에서 텍스트 문자열을 찾습니다.
FINDSTR 파일에서 문자열을 찾습니다.
FOR 파일 집합에서 각 파일에 대해 지정된 명령을 실행합니다.
FORMAT Windows에서 사용할 디스크를 포맷합니다.
FSUTIL 파일 시스템 속성을 표시하거나 구성합니다.
FTYPE 파일 확장 연결에 사용되는 파일 형식을 표시하거나 수정합니다.
GOTO Windows 명령 인터프리터가 일괄 프로그램에서 이름표가 붙여진 줄로 이동합니다.
GPRESULT 컴퓨터 또는 사용자에 대한 그룹 정책 정보를 표시합니다.
GRAFTABL Windows가 그래픽 모드에서 확장 문자 세트를 표시할 수 있게 합니다.
HELP Windows 명령어에 관한 도움말을 제공합니다.
IF 일괄 프로그램에서 조건 처리를 수행합니다.
LABEL 디스크의 볼륨 이름을 만들거나, 바꾸거나, 지웁니다.
MD 디렉터리를 만듭니다.
MKDIR 디렉터리를 만듭니다.
MODE 시스템 장치를 구성합니다.
MORE 출력을 한번에 한 화면씩 표시합니다.
MOVE 하나 이상의 파일을 한 디렉터리에서 다른 디렉터리로 옮깁니다.
OPENFILES 파일 공유에서 원격 사용자에 의해 열린 파일을 표시합니다.
PAGEFILECONFIG 페이지 파일 속성을 표시하거나 구성합니다.
PATH 실행 파일의 찾기 경로를 보여주거나 설정합니다.
PAUSE 일괄 파일의 처리를 보류하고 메시지를 보여줍니다.
POPD PUSHD 명령으로 저장된 디렉터리로 바꿉니다.
PRINT 텍스트 파일을 인쇄합니다.
PROMPT Windows 명령 프롬프트를 바꿉니다.
PUSHD 현재 디렉터리를 저장한 후 디렉터리를 바꿉니다.
RD 디렉터리를 지웁니다.
RECOVER 불량이거나 결함이 있는 디스크에서 읽을 수 있는 정보를 복구합니다.
REM 일괄 파일 또는 CONFIG.SYS에서 주석을 기록합니다.
REN 파일 이름을 바꿉니다.
RENAME 파일 이름을 바꿉니다.
REPLACE 파일을 대체합니다.
RMDIR 디렉터리를 지웁니다.
SET Windows 환경 변수를 보여주거나, 설정하거나, 지웁니다.
SETLOCAL 일괄 파일에서 환경 변경의 지역화를 시작합니다.
SC 서비스를 표시하거나 구성합니다(백그라운드 작업).
SCHTASKS 컴퓨터에서 실행할 명령과 프로그램을 예약합니다.
SHIFT 일괄 파일에서 바꿀 수 있는 매개 변수의 위치를 바꿉니다.
SHUTDOWN 컴퓨터의 로컬 또는 원격 종료를 허용합니다.
SORT 입력을 정렬합니다.
START 지정된 프로그램이나 명령을 별도의 창에서 시작합니다.
SUBST 경로를 드라이브 문자로 지정합니다.
SYSTEMINFO 특정 컴퓨터의 속성과 구성을 표시합니다.
TASKLIST 서비스를 포함한 실행 중인 모든 작업을 표시합니다.
TASKKILL 실행 중인 프로세스나 응용 프로그램을 중지합니다.
TIME 시스템 시간을 보여주거나 설정합니다.
TITLE CMD.EXE 세션에 대한 창의 창 제목을 설정합니다.
TREE 드라이브 또는 경로의 디렉터리 구조를 그래픽으로 화면에 표시합니다.
TYPE 텍스트 파일의 내용을 보여줍니다.
VER Windows 버전을 보여줍니다.
VERIFY 파일이 디스크에 올바로 쓰였는지 검증할지 여부를 지정합니다.
VOL 디스크 볼륨 이름과 일련 번호를 보여줍니다.
XCOPY 파일과 디렉터리 트리를 복사합니다.
WMIC 대화형 명령 셸 내의 WMI 정보를 표시합니다.
//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
. "@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
배치파일 명령어
배치 파일 연산자 | 쉘 스크립트 동의어 | 뜻 |
---|---|---|
% | $ | 명령어줄 매개변수 접두사 |
/ | - | 명령어 옵션 플래그 |
\ | / | 디렉토리 패스 구분자 |
== | = | (같음) 문자열 비교 테스트 |
!==! | != | (다름) 문자열 비교 테스트 |
| | | | 파이프 |
@ | 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 | 첫번째 시리얼 포트 |
'개발 TIP > 개발 TIP' 카테고리의 다른 글
탐색기 오른쪽 팝업메뉴에 항목 추가 (0) | 2011.12.15 |
---|---|
도스 커맨드 실행하기 (0) | 2011.12.15 |
[MFC] mfc42d.dll 파일 포함해서 컴파일 하기 (0) | 2011.04.18 |
[VS_Tip] 와일드 카드 를 이용한 검색 (0) | 2011.03.27 |
디렉토리 리스트와 화일이름리스트를 화일로 전환하는 프로그램 (0) | 2011.03.17 |
댓글