반응형

개인적으로 보기 위해서 퍼온 글입니다.

출처는 아래와 같습니다.

 

 

[원본출처] blog.naver.com/nancy2092/60029734537

 

게으르게 : 네이버 블로그

자기소개가 없습니다.

blog.naver.com

[퍼옴출처] [본문스크랩] 튼튼한 배치파일 기초|작성자 모꼬모지

 

모꼬모지 : 네이버 블로그

서이웃은 없다. (__)a

blog.naver.com

(출력 관련)

 

ECHO

 

1) 배치 파일 안에 있는 명령이 실행될 때 명령어의 이름을 보여주 거나 감추어 주는 기능

2) 토글(TOGGLE)키처럼 동작하기 때문에 처리 과정을 화면에 표시 여부를 쉽게 조정

3) 명령 사용 법

 - ECHO OFF - 명령을 보여주지 않음. 처리 명령 출력 최소화로 화면 깔끔.

 - ECHO ON - 명령을 보여줌. 처리 명령이 출력되어 오류 탐색 시 유용. 기본 값.

* 형식 : ECHO ON or ECHO OFF

 

(주석 관련)

 

REM

 

1) 주석 삽입을 위함(설명 등의 용도)

2) 아무 기능을 하지 않는 빈줄 삽입

3) 명령 사용 법

* 형식 : REM [설명문]

예시)

ECHO OFF

REM NAME REM_TEST.BAT

REM FUNCTION: REM 명령의 사용 예를 보여주기 위한 배치 파일이다.

REM 아래 rem 명령의 3가지 사용 예를 보여주었다.

REM (기능 1) 설명을 위해 사용한다.

REM 이렇게 설명을 달 수 있다.

REM (기능 2) 분석시 기독성을 위해 빈줄을 위해 삽입할 때 사용할 수 있다.

REM

REM (기능 3) 실행 명령어의 중지를 위해 사용한다.

REM CHKDSK

 

(정지 관련)

 

PAUSE

 

1) 사용자가 키 입력까지 처리중인 배치 파일 일시정지

 

* 형식 : PAUSE [message]

예시)

@echo off

echo please put a new disk into drive B

pause

copy a:*.* b:


(조건 관련)

IF

 

1) 배치 파일의 조건적인 처리 수행

2) 조건이 TRUE일 경우 IF문 다음의 문장 수행, FALSE일 경우 뒤따라오는 문장의 명령 무시

3) IF 문의 종류로는 6가지 독특한 조건이 허용됨

     - 조건 1) IF EXIT filename.ext(or parameter) Command

     - 조건 2) IF NOT EXIT filename.ext(or parameter) Cmmand

     - 조건 3) IF String1== String2 Command

     - 조건 4) IF NOT String1==String2 Command

     - 조건 5) IF ERRORLEVEL value Command

     - 조건 6) IF NOT ERRORLEVEL value Command

 

조건 1) IF EXIST 형식

 - 조건에 해당하는 파일이나 변수에 입력된 값이 존재(조건이 TRUE면)하면 다음 문장을 수행

 

예시) C 드라이브의 루트 디렉토리에 IF_ONE.TXT 파일이 존재하면 프린트

IF EXIST C:IF_ONE.TXT PRINT C:IF_ONE.BAT

 

조건 2) IF NOT EXIST 형식

 - 조건에 해당하는 파일이나 변수에 입력된 값이 미존재(조건이 FALSE면)하면 다음 문장을 수행

 - IF EXIST문과 정 반대의 의미로 사용

 - 배치 파일 구성상 실행에 관계된 중요한 파일이 존재하지 않을 경우 지정된 행으로 이동하여 배치 프로그램의 실행을 중단하도록 하는데 많이 이용된다.

 

예시) 변수 %1이 존재하지 않아야만 조건값이 참이 되어 뒤에 따라오는 명령을 수행

IF NOT EXIST %1 ECHO %1 Does Not Exist in Your disk

 

조건 3) IF String1==String2 Command 형식

 - 문자열이나 문자 하나를 변수로 입력받아 배치파일 내에 미리 지정된 문자열과 비교, TRUE면 다음 명령 처리

 - FALSE면 다음 행으로 건너뜀

 - 대소문자 구분하므로 주의.(" " 키워드 사용 시 대소문자 구분 안함)

 

 예시) If string문을 이용한 배치 파일

REM 이 배치 파일의 이름은 QUESTION.BAT이다.

ECHO OFF

IF %1==BOSS ECHO YOU ARE A BOSS...1

IF %1==HERO ECHO ARE YOU A HERO...?

IF %1==FOX ECHO IS SHE A FOXY...?


조건 4) IF NOT String1==String2 Command 형식

 - 문자열이 같지 않아야만 조건 뒤에 오는 명령 실행

 

조건 5) IF ERRORLEVEL value Command 형식

 - 탈출 상태 코드(EXIT STATE VALUE)가 주어진 값보다 크거나 같으면 지정된 도스 명령을 실행

 

예시) 도스의 외부 명령어인 FORMAT.COM의 EXIT STATE VALUE 가 다음과 같다고 할 때, IF ERRORLEVEL 문의 처리 방법

VALUE

에러 레벨 처리 내용

0

포맷 성공

3

CTRL+C가 눌려져 포맷이 중단된 경우

4

디스크 에러에 의해 포맷이 실패한 경우

5

프롬프트에서 사용자가 중단한 경우

 

조건 6) IF NOT ERRORLEVEL VALUE COMMAND 형식

 -  조건 5)와 반대.

 

 

(반복 관련)

 

FOR

 

1) 주어진 조건을 만족 할 때까지 반복적으로 도스 명령어 실행

* 형식 : FOR %%변수명 IN (SET) DO Command

 - %%변수명 : 사용자 지정 변수명(ex. %%i, %%a 등.., FOR문 상위에 미리 선언하지 않아도 됨)

 - (SET) : for문의 반복 조건

 

예시) 

 

ex) (0,1,10) : 0~10까지 1씩 증가하며 반복

 

FOR %%i IN (0,1,10) DO (

   ...

)

ex) STR[3] 문자열 반복

SET STR="AA" "BB" "CC"

FOR %%i IN (%STR%) DO (

   echo %

)

 

(명령줄 이동 관련)

 

GOTO

 

1) 조건에서 만족하면 지정된 레이블명이 있는 행으로 제어권을 이동

2) 레이블명은 :(COLON)을 앞세우고 적음

3) 유효한 레이블명은 공백(SPACE)이나 ;(새미콜론), =(EQUAL)과 같은 기호를 포함하지 않아야 함

4) 레이블명은 첫 8자까지만 인식하므로 8자 이하로 기재

GOTO label

 

(실행 관련)

 

CALL

1) 배치 파일 내에서 명령의 중단이나 정지없이 또 다른 배치 파일을 불러 실행시키도록 하는 명령

2) 실행할 다른 배치 파일의 실행 경로와 파일명을 기재

3) 배치 파라메터에는 배치 파일과 함께 실행할 스위치나 파일명, %0~%9까지의 대체 변수, 환경 변수 등

4) 다른 명령과는 달리 파이프 기호나 리디렉션 기호를  CALL 명령과 함께 사용할 수 없음

5) 배치파일 중간에 사용하면 다른 배치파일을 불러들여 실행하고 다시 제어권을 CALL 문이 사용된 배치프로그램으로

    넘김

    - CALL 명령 없이도 다른 배치파일을 실행시킬 수 있으나, 다시 제어권이 CALL 문이 사용된 배치프로그램으로

      돌아오는 기능이 있기에 차이점이 있다고 볼 수 있다.

    - CALL 명령 없이 다른 배치파일을 실행하는 경우, 제어권이 CALL 문이 사용된 배치프로그램으로 돌아오지 않기 때문에

      명령 하단의 구문은 실행되지 않음.

 

CALL [drive:][path] filename [batch-parameters]

 

예시) 외부에 CHECK.BAT이란 파일을 불러 실행하려는 경우에 마지막 행에서 어떻게 차이가 나는지 알아볼 수 있는 예


REM 이 파일은 마지막 행에 CALL을 사용한 예이다.

DIR *.* > PRN

CALL CHECK.BAT

예시) CALL 문을 이용한 배치파일 호출 예


REM 이 파일은 마지막 행에 직접 배치 파일을 적어 준 예

DIR *.* > PRN

CHECK.BAT

TIME

 

♣ [파라메터와 스위치]

▶ text

사용자가 선택키를 고를 때까지 화면에 나타내고 싶은 메시지를 적어 줄

수 있다. 그러나 프롬프트 앞에 단지 문자열의 일부분으로써 스위치 구분자

인 (/)를 사용하려 한다면, 인용 부호(Quatation)를 이용해 표시해 줘야 한다.

▶ /C[:]keys

프롬프트에 할당된 키를 명시한다. 각 키의 정의는 대괄호([,]) 안에 정의

되며 콤마(,)에 의해 구분되고 물음표(?)가 뒤따라오게 된다. 그러나 만약 /c

스위치가 정의되지 않으면 디폴트 값인 YN(Yes, No)이 사용된다. 또한 구분

자인 콜론의 사용은 선택적이다.

▶ /N

CHOICE 명령에서 프롬프트를 표시하지 않는다. 그러나 프롬프트 앞에 나

타나는 text에서 지정한 메시지는 나타난다. 또 /N 스위치를 사용했다. 하더

라도 /C 스위치에 지정된 키의 사용은 유효하다. 다만 화면에 표시하지 않는

것뿐이므로 선택키가 안 보인다고 당황할 필요는 없다.

▶ /S

이 스위치는 선택키의 대문자와 소문자 입력을 구분하는 동작을 한다.

▶ /T[:]char,sec(nn)

이 스위치는 char에 지정된 디폴트 선택키를 sec(초단위)에 지정된 시간만

큼 지연시킨 후에 실팽되도록 한다. char에 사용되는 문자는 /C 스위치에서

지정한 선택문자들에 포함된 것이어야 하며, 지연 시간의 범위는 0부터 99초

까지의 초단위 시간을 사용할 수 있다.

CHOICE 명령이 ERRORLEVEL 변수는 /C 스위치에 처음 할당되는 키가

/T옵션에서 디폴트 키로 정해졌을 때, 이 키가 눌려지지 않고 시간이 지나

들어온 값이면 1, 두 번째 키는 2, 세 번째는 3과 같이 계속해서 주어지며 이
들 이외의 키가 눌려진 경우라면 경고음을 내보낸다. 그리고 각 스위치나

옵션에서 어떤 문제가 발생해서 에러가 발견되면 ERRORLEVEL값이 255에

설정되며, 사용자가 CTRL+BREAK나 CTRL+C를 눌러 중지한 경우라면

CHOICE 명령은 에러 레벨 값을 0에 설정하게 된다. 이러한 에러 레벨 변수

값을 배치 프로그램에서 사용할 경우에는 큰 값에서 작은 값으로 비교하는

내림차순으로 사용해야 한다. 예제를 한번 보도록 하자.

choice /c:ync YES, NO, or Continue

 

이 명령은 Y,N,C와 같은 세 가지 선택키를 보여주며 Yes, No, or Continue

와 같은 메시지를 앞에 보여주게 된다.

Yes, No, or Continue [Y,N,C]?

 

또 다른 예제인 /T 스위치를 사용한 예를 보도록 하자.

choice /c:ync /t:n,5

 

화면에 나타난 메시지 없이 다음의 [Y,N,C]? 라는 선택키만을 보이고 5초

동안 기다릴 것이다. 그러나 5초 후에 사용자가 누른 키가 없다면 CHOICE

는 디폴트로 설정된 N키를 선택하고 두 번째 키에 의한 에러 레벨 값 2를 내

보내게 되는 것이다.

이와 같은 에러 레벨을 이용한 배치 파일을 구성하기 위해서는 choice는

아주 다양한 배치의 실행을 돕는다. 만약 에러 레벨의 검사후 원치 않는 값

이면 프로그램을 빠져나오도록 구성할 수도 있다. 도스의 외부 명령어인

chkdsk를 실행하기 위해 다음과 같이 choice 명령을 구성할 수 있을 것이다.


choice /ty,5 chkdsk for your drive

if errorlevel 2 goto SkipCheck

CHKDSK c:

:SkipCheck

<예제 2-13> choice문을 이용한 배치 파일

디폴트 선택키로 y, n이 주어져 있다. /T스위치에서 5초 안에 키가 안 눌

려지면 Y키를 CHOICE에 전달하고 C 드라이브에 대한 CHKDSK를 실행하

게 된다. 그러나 5초 이내에 디폴트 키가 아닌 N키가 눌려지면 에러 레벨2

가 전달되어 SkipCheck라는 레이블로 이동하게 되어 CHKDSK C:의 실행이

건너띄게 된다.

실제로 배치 프로그래밍에서 CHOICE 명령과 같이 사용자의 키 입력이나

선택를 요구하는 부분을 필요로 하는 경우가 많이 있다. 이런 대화식 선택

화면을 구성하기 위해 CHOICE는 매우 유용한 명령으로 이용될 것이다.

2.2 배치 파일을 돕는 실제적인 것들

  2.2.1 영원한 숙제, COMMAND.COM의 이해

도스의 주인공이자 실질적인 관리자 역할을 하는 COMMAND.COM의 역할은

이미 많은 사용자들이 잘 알고 있을 것이다. 그러나 도스 프롬프트상태의 명령

행에서 입력되는 모든 명령들을 해석하고 이를 컴퓨터가 알아채도록 번역해 주

는 명령어 해석기로서의 COMMAND.COM의 구성에 대해 말만큼이나 올바로

알고 있는 분들이 적은 것 같다.

이는 몇 가지 매뉴얼에서 이에 대한 정확한 의미를 제대로 전달해 주지 못하

기 때문에 발생한 오해에서 비롯되는 것이므로 이번 기회에 COMMAND.COM

이 컴퓨터에서 행하는 역할을 다시 한번 정확히 짚어 볼 필요가 있을 것이다.

배치 파일뿐만 아니라 메모리 기저에 상주하는 COMMAND.COM의 상주 부분이 키보드로부터 입력되어 들어온 명령들의 해석상의 문제들을 어떻게

처리하는지 확인하는 것도 좋은 방법이 될 것이다.

보통 명령 해석기의 존재는 프로그램 실행 도중 도스쉘로 빠졌을 때의 실

제 처리를 담당하는 SECONDARY COMMAND PROCESSOR와 부팅과 함께

설치되는 도스 커맨드 행 상태의 ORDINARY COMMAND PROCESSOR로

구분할 수 있다.

처음 컴퓨터를 켰을 때 읽어 들인 COMMAND.COM은 일반적인 도스 프

롬프트 상태에서의 도스 명령어 해석기로 작동한다. 그러나 윈도우즈나 도

스의 도스쉘같은 응용 프로그램은 도스쉘로 빠졌을 때 도스 프롬프트를 출

력하기 위해 두 번재 COMMAND.COM을 읽어 들이게 된다. 이렇게 두 가지

이 명령 처리 쉘로 메모리에 상주된 부분이 있기 때문에 도스쉘로 빠져 나

왔을 때의 기본 메모리 사용량은 감소하게 되는 것이다.

이 두 번재 명령 처리기를 탈출하기 위해서는 도스의 내부 명령어인 EXIT

를 입력함으로써 첫 번째 명령 처리기로 제어권을 넘겨줘야 한다.

그럼, 도스 COMMAND.COM의 사용 방법은 어떠한지 구체적인 사용 옵션

과 실행 상의 차이점을 공부해 보도록 하자.

COMMAND[[drive:]path][device][/E:nnnnN][/Y[/C command|/K command]]

 

보통 배치 파일이나 명령행 상태에서는 위와 같은 구조를 가질 수 있지만

CONFIG.SYS 파일 안에서 지정할 경우에는 SHELL 명령 뒤에 적어 줘야 한

다. 또한 배치 파일에서 루트 이외의 다른 디렉토리에 COMMAND.COM이

존재할 경우 이의 위치를 도스에게 알려주기 위해 COMSPEC 환경 변수를

사용하여 지정할 수 있다.


SHELL=[[dos-drive:]dos-path]COMMAND.COM [[drive:]path][device]

[/E:nnnn][/P [/MSG]]

명령행에서 사용될 때와 CONFIG.SYS에서 사용될 때의 사용 옵션과 스위

치가 다른 것을 알 수 있다. 이는 실행 명령으로서 존재하는 배치 파일과

디바이스나 드라이버의 설치를 위한 CONFIG.SYS 파일의 양쪽 특성을 모두

처리해야 하는 COMMAND.COM의 명령 해석기로서의 특징 때문이다. 그럼

각 파라메터와 스위치에 대한 설명은 다음과 같다.

▶ [drive:]path

도스가 COMMAND.COM의 일부분을 다시 읽어 들일 때, 명령 해석기의

위치를 찾을 수 있는 드라이브와 디렉토리 경로를 지정한다.

▶ drive

CITY 명령을 이용하여 명령의 입력과 출력을 위한 다른 디바이스를 지정

할 수 있다. 기본적으로 현재 사용중인 장치가 계속 사용된다.

▶ /C command

앞의 CALL 명령에서 잠간 설명했듯이 두 번째 명령 해석기를 읽어 들여

command에 지정된 명령을 실행하고 다시 exit로 빠져 제어권을 첫 번째 명령

해석기로 돌려주는 기능을 한다. 이 스위치는 명령행의 마지막에 위치해야

한다.

▶ /E:nnnnn

명령 해석기를 위한 환경 크기를 설정하는 옵션이다. 단위는 바이트로 이

루어지며, 지정 가능한 값의 범위는 160부터 32768까지의 값이 사용된다. 아

무런 값이 지정되지 않으면 디폴트로 256이 사용된다.

▶ /K command

/k 스위치는 다음에 지정된 명령을 실행한다. 이 옵션은 도스 6.0부터 지원

되기 시작했으며, /c 스위치와 마찬가지로 명령행의 마지막에 위치해야 한다.

이 스위치는 윈도우즈에서 MS-DOS 프롬프트를 위한 STARTUP 배치 파일

을 지정하는데 특히 유용하며, 그렇게 하기 위해서는 pif 에디터에서 DOSPRMPT.PIF 파일을 열고 Optional Parameters 박스에 /K 스위치를 적어

줘야 한다. 그러나 이 /k 스위치를 config.sys의 shell행에 이용하지 않는 것이

좋다. 왜냐하면 사용자의 autoexec.bat 파일을 변형시키는 일부 응용 프로그램

과 인스톨 프로그램과 문제를 일으킬 소지가 많기 때문이다.

▶ /P

CONFIG.SYS의 SHELL 명령과 함께 사용되는 옵션이다. 이 스위치는 명령

어 해석기인 COMMAND.COM의 새로운 복사본을 항상 만들게 하여 메모리

에 이 상주 부분이 존재하도록 하는 역할을 한다.

▶ /MSG

이 스위치는 플로피 디스크로부터 MS-DOS를 실행하려고 할 때 유용하며,

/P 스위치와 함께 사용되야 한다.

▶ /Y

이 스위치는 /C나 /K 스위치에 의해 명시된 배치 파일을 한 줄씩 순차적

으로 진행하도록 COMMAND.COM에게 지시한다. 대개 이것은 배치 파일을

디버깅할 때 매우 유용하다.

2.2.2 COMMAND.COM의 환경 구성

도스 명령어 해석기인 COMMAND.COM의 환경은 처음 부팅할 때 구축된 다. 즉 사용자가 새로운 COMMAND.COM을 실행시켰을 때, 도스는 새로운 명

령어 처리 환경을 생성하게 된다는 뜻이다. 그리고 옵션 지정 없이 시작된 새

로운 환경은 기존에 메모리에 상주하고 있던 명령 환경을 복사하여 사용하게

된다. 이때 원래 환경에 영향을 미치지 않고 새로 시작한 COMMAND.COM의

환경을 바꿀 수 있는데 기본값으로는 256bytes가 할당된다.

도스가 명령어 해석기인 COMMAND.COM을 메모리로 불러들일 때 두 가

지 부분으로 나누어 불러들이게 된다. 메모리에 항상 상주하게 될 상주

(RETURN) 부분과 기본 메모리의 위 영역에 필요시마다 일시적으로 머무

를 TRANSIENT 부분으로 존재하는 COMMAND.COM은 다른 프로그램이

TRANSIENT 부분에 겹쳐 써질 경우 디스크로부터 다시 로딩해야 한다. 이

때 필요한 것이 환경 변수 COMSPEC의 지정 여부이다. 일단 COMSPEC을

통해 COMMAND.COM의 위치를 알고 있다면 지정된 디스크 드라이브에서

COMMAND.COM을 찾게 된다.

또한 DOS=HIGH 명령에 의해 도스 상주부가 HMA(High Memory Area)에

로딩되었다면, 기본 메모리를 차지하고 있던 COMMAND.COM의 상주 영역

이 빠지므로 이용할 수 있는 메모리의 양이 늘어나게 된다. 대개 도스는 에

러 메시지에 관한 내용을 메모리에 저장해 두지 않고 디스크에 존재하는

COMMAND.COM 파일 안에 남겨 두게 되는데, 도스가 에러 상황을 만났을

때마다 필요한 메시지를 디스크로부터 찾아서 화면에 보여주게 된다.

만약 하드 디스크 대신 플로피디스크로부터 부팅하였다면 도스는 드라이브

A로부터 COMMAND.COM을 찾아 에러 메시지를 보여주려 할 것이다. 이때 A

드라이브에 들어 있는 디스켓에 COMMAND.COM이 포함되더 있지 않다면, 도

스는 에러에 적절하고 완전한 메시지를 표시하지 못한다. 그런 경우를 대비해

서 COMMAND.COM의 /MSD 스위치는 디스크에 저장되어 있는 에러 메시지를

메모리에 상주시켜 완전한 에러 메시지를 보여주게 하는 것이다.

2.2.3 도스 환경의 조율사 SET

SET 명령은 MS-DOS 환경 변수를 화면에 보여주거나 지정하고 제거하는데

이용되는 명령이다. 배치 파일이나 프로그램이 도스 상태에서 적절히 적절한

환경으로 설정되었는지를 나타내거나 제어하는데도 이 SET 명령이 사용되며,

도스를 시작할 때마다 환경 변수를 조정하기 위해서는 AUTOEXEC.BAT나

CONFIG.SYS에 직접 SET VARIABLE=[STRING]과 같은 형식을 통해 지정해

줘야 한다.

도스 프롬프트에서 현재 지정된 환경 변수들을 알아보기 위해서는 그냥SET 이라고 입력하면 설정된 모든 환경 변수와 환경 영역에 기록된 모든 내용을

보여준다. 이 환경변수는 프로그램 사용중이나 배치 파일 실행에 있어서 매우

중요한 요소로 사용될 수 있다.

일반적으로 이름 변수명과 문자열을 연결 지어 환경 영역에 지정해 주기

위해서는 다음과 같이 SET 명령을 이용한다. 예를 들어 노턴 유틸리티 디렉

토리인 C:NORTON을 SYMENTEC이란 이름 변수에 연결 지었다면, 배치 파

일에서 노턴 디렉토리를 % 기호로 둘러친 이름 변수로 표현할 수 있게 된다

다시 말하자면 앞서 SYMENTEC이란 이름 변수에 연결된 C:NORTON이란

디렉토리를 직접 대입 변수명으로 사용할 수 있다는 것이다.

dir %SYMENTEC%

 

이와 비슷하게 SET 명령은 배치 파일에서 또 다른 사용 방법이 있다. 바로

PATH 환경 변수에 새로운 디렉토리를 지정하거나 추가할 때도 이용될 수 있

다. 다음의 배치 파일 예제에서 볼 수 있듯이 기존의 %PATH% 변수에 대체 변수 %1이 추가되는 새로운 패스 환경을 만드는 SET PATH = 명령을 사용 하였다.


@echo off

rem PATH_ADD.BAT adds anew directory to the PATH environment variable.

set path=%1, %path%

set

<예제 2-14> set문을 이용한 배치 파일

기본적으로 SET 명령을 통하지 않고도 도스는 3가지의 환경 변수를 설정

하게 된다. 경로명을 설정하는 PATH, 명령 대기 상태를 나타내는 PROMPT

그리고 명령 처리기의 선택을 가리키는 CONFIG가 그것이다. 또한 환경 변

수는 변수명에 입력된 모든 문자를 대문자로 기억하게 된다. 실제로 대소문

자 구분이 있는 것은 아니지만 변수명에 치환된 문자열이 대입되는 것을 보

면 쉽게 알 수 있을 것이다.

그리고 IF 명령에서 환경 변수를 사용할 때에는, 널(NULL)값이 사용되는

경우를 대비해서 따옴표로 둘러쳐서 표현해야 할 필요가 있다. 보통은 환경

변수나 문자열에 따옴표를 사용하면 이것까지 환경 영역에 저장되어 표현되

므로 주의해야 한다.

그럼, 사용자의 컴퓨터의 환경 영역을 조회하기 위해서 어떻게 해야 하는

가? 그것은 도스 프롬프트에서 SET라고 입력하고 엔터를 치면 현재 설정된

모든 환경 변수의 내용을 보여준다.

C:>SET

CONFIG=4DOS

PATH=C:SYSDOS;C:;C:qemm;C:SYS4DOS;E:HWP25;C:U1;C:U1EQ;

C:U1A;C:U1V;C:U2NT;

LOADHIDATA=C:QEMMLOADHI.RF

COMSPEC=c:sys4dos4dos.com

ARJ_SW= -JYRY -JV -I1 -JM1

TEMP4DOS=f:

TMP=f:

TEMP=F:

PKTMP=f:

.LZH=C:U1ALHA.EXE E

.ARJ=C:U1AARJ.EXE E

.ZIP=C:U1APKUNZIP

.OMP=C:U1AOMP.EXE E

.SQZ=C:U1ASQZ.EXE E

.DOC=C:U1MDS.EXE

.TXT=C:U1MDS.EXE

.HWP=d:hwp25hwp.exe

PROMPT=Type EXIT to return to hwp$_$p$g

SYMANTEC=C:U2NT

PCTOOLS=D:PCTOOLSDATA

HWPSTUB=SWAPDIR E:HNCTEMP -SWAPNAME HWP25.SWP

<SET 명령으로 설정된 환경 변수의 목록>

이제 환경 변수에 대해 어느 정도 이해가 가셨으리라 믿는다. 다음 장은

실제적으로 시스템을 구성하는 autoexec.bat 파일과 config.sys에 대해서 자세

히 살펴볼 것이다. 자신의 컴퓨터를 가지고서도 배치 파일과 config.sys 파일

구성에 어려움을 겪거나 두려움을 가진 분들은 꼭 한번 봐야 할 것이다. 가

장 기본적인 내용이면서도 선뜻 시스템을 망가뜨리지 않을까 겁먹고 계신

분들에게 좋은 해결책이 될 것이다.


윈도우즈의 문제를 해결하는 방법.

윈도우즈를 실행하다 보면 메모리 문제, 디바이스 설치에 관한 문제, INI 파일 설정에

관한 문제와 같은 다양한 문제에 골치를 섞이게 된다. 이런 문제를 도스에서는 직접

AUTOEXEC.BAT나 CONFIG.SYS 파일을 조작하거나 수정함으로써 해결할 수 있지만,

윈도우즈는 복잡한 구성 때문인지 몰라도 만만한 해결책이 없을 것이다.

윈도우즈는 기본적으로 실행 옵션을 여러 개 사용할 수 있는데, 여기서 디버그 모드로

윈도우즈를 실행하면서 충돌이 발생하는 부분을 찾아낼 수 있다.

윈도우즈는 디버그 모드로 실행시킬 때 4가지 옵션을 제공하며, WIN /?를 치면 옵션의

설명이 자세히 나온다. 그럼 4가지 옵션을 주고 디버그 모드로 실행시키는 방법을 알아보자.

① WIN /D:X

이 옵션을 주는 이유는 사용자가 판단하게 메모리 충돌이나 디바이스 램상주 프로그램

이 상위 메모리에 상주했을 때 윈도우즈와 충돌을 일으킬 경우 이를 해결하기 위해 사

용하는 것이다.

② WIN /D:F

이 옵션은 윈도우즈의 386확장 모드 실행시 조정되는 32비트 디스크 엑세스 옵션과

관계된 문제를 해결하는 것이다. 옵션 F는 32비트 디스크 엑세스 방식으로 하드 디

스크에 접근하는 것을 방지하고 표준 바이오스 방식을 통해 하드 디스크에 접근하게

하는 옵션이다.

③ WIN /D:V

V 옵션은 하드 디스크를 가상 메모리로 사용하지 못하게 하는 옵션이다. 스카시 드라

이브를 가지고 있는 경우 이 옵션이 충돌을 해결하는데 중요하다.

④ WIN /D:S

이 옵션 명령은 상위 메모리의 F000에서 FFFF까지의 영역에 존재하는 롬바이오스

부분에서 SYSTEM BREAK POINT라는 지시행을 찾지 못하도록 하는 것이다.




기본적으로 이런 실행 모드 조정을 통해 문제를 발견할 수 있지만, 더욱 세부적인 사

항을 알아내지 못할 경우에는 윈도우즈 실행시 어딘가 문제가 있을 때이다.

윈도우즈 디렉토리에 부트 로그 파일을 만들기 위해서는 윈도우즈를 실행할 때 /B옵

션을 줘서 실행해야 한다. 그러면 윈도우즈가 설치될 때, 메모리에 띄워지는 모든 프

로그램과 파일에 대한 기록을 하게 된다. 여기서 이 로딩기록을 적어 둔 파일을 분석

해 봄으로써 문제의 원인을 찾아낼 수 있다.

이 방법은 INI 파일에 기록된 실행 순서에 맞지 않는 프로그램이나 폰트, 데이터 파일

등이 로딩되는데 실패하는가의 여부를 파악하기 쉽다. 이 같은 사실을 알아내는데는

에러 코드를 로그 파일에 기록하기 때문이다. 에러 코드에 관한 내용은 다음과 같다.

⊙ 윈도우즈의 에러 발생시 각 코드 번호가 의미하는 것

0 : 메모리가 부족한 경우이다.

2 : 지정된 파일이 해당 디렉토리에 없는 경우

3 : 패스가 지정되어 있지 않는 경우, 기존에 있던 디렉토리를 지운 경우에 발생한다

5 : 파일 확장자나 데이터를 작업이나 프로그램에 동작으로 연결하려다 실패한 경우이다.

6 : 라이브러리에서 각 작업에 대해 분리된 데이터 세그먼트를 요구하는 경우

8 : 응용 프로그램을 실행하기 위한 메모리가 부족하다.

10 : 구버전의 윈도우즈 파일을 가져온 경우이다.

11 : EXE 파일이 손상된 경우이거나 윈도우주용 프로그램이 아닌 경우이다.

12 : OS/2전용 응용 프로그램을 윈도우즈에서 실행하려는 경우에 발생한다.

13 : MS-DOS 4.0과 OS/2 1.0에서 실행할 수 있는 패밀리 모드 프로그램을 실행

하려는 경우이다.

14 : EXE 파일이 손상되어 있다.

15 : 보호 모드에서 예전에 만들어 호환되지 않는 윈도우즈 실행 파일을 실행하려는 경우

16 : 여러 개의 데이터 세그먼트가 들어 있는 EXE 파일의 복제본을 띄우려 하는 경우

17 : 대형 프레임에서 EMS모드로 이미 사용 중인 DLL을 응용 프로그램과 연결하려는 경우

18 : 보호 모드용 프로그램을 리얼 모드로 실행하려는 경우에 발생한다.

참고사항 : 도서출판 (혜지원), 저자(오요한), book title(배치와 매크로)

 

 

반응형

'배치파일' 카테고리의 다른 글

[배치파일] IF / ELSE  (0) 2020.04.02
[배치파일] 배치파일 다중 빌드  (0) 2020.01.03
Posted by tislqhf

블로그 이미지
개인적인 공부자료 정리하는 공간
tislqhf

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함