about uscontact

배치(Batch) 프로그래밍 참고자료

Category:
Author: zemna
Date: April 17, 2021
Share this:

자료 출처: 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$$$

좀더 생각하면 이 기술은 다른 목적에도 사용할 수 있다. 이는 파일안

Share this:

Leave a Reply

Your email address will not be published.

ZEMNA.NET

Professional software development agency estalished in Indonesia. We offers website setup, web application development, fulfillment service, and etc.
Follow us
Follow us to get latest news and tutorials.
2022 - Copyright, All Rights Reserved, Made by ZEMNA.NET with ❤️
magnifiercrossmenu