자료 출처: http://blog.naver.com/darkstorm001/40017851898
▶ 참고자료
다음은 배치 프로그래밍의 대가인 티모 살미 교수가 정리한 것입니다.
아주 유용한 테크닉들이 들어있습니다.
1. "@echo off"를 일반적으로 사용하기
====================================
화면에 명령어들이 표시되지 않게 echo off 하고, 그 라인도 화면에 표시 되지 않게 하기 위해서 다음과 같이 하면 된다.
@echo off
이 것은 MsDos 3.30 이후 버전에서만 작동한다. 이것을 일반적으로 사용하게 하기 위해서 3.30이상의 MsDos를 사용한다면 autoexec.bat 안에 다음과 같이 적어 놓는다.
set _echo=@
그리고 배치파일에서 다음과 같이 사용한다면 어느 버전의 MsDos버전에서도 작동한다.
{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}_echo{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}echo off
2. 모든 파일을 지우기
=====================
가장 흔하게 질문되는 것(FAQ)중의 하나는 del *.* 을 사용껦 때,"Are you sure (Y/N)?" 라는 확인을 어떻게 하면 나타나지 않게 하는것이다. 다음과 같이 사용한다.
echo y| del *.*
화면에 나타나는 메세지도 보이지 않게 하려면 다음과 같이 한다.
echo y| del *.* > nul
이러한 확인 절차를 표시하지 않게 하는 것은 토론의 여지가 많지만,위와 같이 사용할 수 있다.
3. 다중 반복
============
배치파일에서 다중 루프(반복)를 사용하는 것이 가능하다. 다음의 두배치파일을 생각해 보자. 그리고 test.bat을 불러 실행시켜 보자.
echo off
rem TEST.BAT
for {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}f in (a b c d e f) do {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}comspec{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139} /c test2 {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}f
echo off
rem TEST2.BAT
for {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}g in (1 2 3) do echo {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}g
아니면 한줄로 다음과 같이 써서 사용할 수도 있다.
for {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}f in(a b c d e f) do {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}comspec{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139} /c for {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}g in (1 2 3) do echo {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}f{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}g
이 두번째 방법의 단점은 echo가 화면에 표시된다는 것이다.
4. 디렉토리가 존재하는지 확인하는 방법
======================================
디렉토리가 있는지 확인하는 것은 가끔 매우 쓸모있는 일이다. {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1의 디렉토리가 없다면 다음 확인은 참이 될것이다.
if not exist {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1nul if not exiat {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1nul echo Directory {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 does not exist
5. 프로그램을 현디렉토리나 경로에서 사용할 수 있는지 확인하기
====================================
배치 프로그램에서 프로그램을 불러서 사용할때, 그 파일에 대한 경로를 써주지 않았을 경우, 그 프로그램이 현재의 디렉토리나 경로에서 사용가능한지 확인할 때 도움이 될 것이다.
set _found=
if exist {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 set _found=yes
for {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}d in ({83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}path{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}) do if exist {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}d{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 set _found=yes
for {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}d in ({83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}path{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}) do if exist {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}d{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 set _found=yes
if "{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}_found{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}"=="yes" goto _continue
echo {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 is not at path or the current directory
goto _out
:_continue
echo {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 found at path or in the current directory
:_out
6. 배치파일에서 서브루틴이나 재귀적방법을 사용하기
====================================
배치파일 안에서 서브루틴을 사용하는 것은 가능하다. 방법은 서브루틴이 실행된 뒤에 돌아가야할 곳을 가르키는 환경변수(예를들면_return)를 설정하는 것이다. 이런 예는 UNPACK.BAT 이나 BOOT.BAT의:_common 과 :_subru 부분에서 찾아 볼 수 있다.
마찬가지로 재귀적인 사용이 가능하다. ("재귀적인 방법"의 의미는 한 배치파일이 자기 자신을 불러 사용하는 것이다.) 이 예는 SAFEDEL.BAT에서 아래의 행을 따라 찾아 보면 된다.
for {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}f in ({83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1) do call safedel {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}f recurse
배치파일의 0번째 인수({83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}0)는 배치파일 자신을 나타내므로, safedel은 {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}0으로 대치 되어 사용할 수도 있다.
7. 매개 인수(parameter)를 대문자로 바꾸기.
====================================
다음은 배치파일에 사용한 인수 {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 를 대문자로 바꾸어 주는 예제이다. 이는 MsDos는 path를 대문자로 바꾼다는 점을 이용한 것이다. 결과는 upcase_에 저장될 것이고, 원래의 경로가 다시 저장될 것이다.
set tmp_={83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}path{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}
path={83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1
set upcase_={83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}path{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}
path={83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}tmp_{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}
8. 새로운 디렉토리를 경로에 붙이기
====================================
자주 필요한 이 기술은 매우 간단하다. 예를 들어 {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1를 경로에 덧붙이려면
path={83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}path{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139};{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1
이라고 하면된다.
이 기술은 배치파일 안에서만 사용할 수 있다. 배치파일 안에서만 환경변수({83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}path{83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139})를 사용할 수 있기 때문이다. 존재하지 않는 디렉토리를 덧붙이려한다거나 중복해서 경로를 덧붙이는 것을 방지하는 ADDPATH.BAT이라는 배치파일이 있다.
9. 두 파일을 비교하기
====================================
배치파일에서 두 파일이 같은지 아닌지 확인해 볼 수 있다. 이 기술은 MsDos의 외부 명령어인 fc.exe와 find.exe를 사용한다. (외부 명령어라는 뜻은 MsDos와 같이 있는 프로그램들이다. 대부분의 외부 명
령어용 프로그램들은 c:dos 에 위치한다.)
fc {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}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 {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 and {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}2 are different
if exist notsame$ echo Files {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}1 and {83832c2e9762d7d59158bb8e184331dad143c7b73eb69f86229ee6e276689139}2 are identical
if exist tmp$$$ del tmp$$$
if exist notsame$ del notsame$
if exist diffe$$$ del diffe$$$
좀더 생각하면 이 기술은 다른 목적에도 사용할 수 있다. 이는 파일안