mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Saturday, July 15, 2006

[배치 파일] 프로그램 실행의 성공 여부를 Error Level 로 확인/판단하기: ERRORLEVEL


윈도우의 명령 프롬프트(일명 도스창) 상에서, 어떤 프로그램이나 명령어를 실행시킬 때, 그 프로그램이 성공적으로 끝나면, 그 프로그램은 정수 0 (제로) 을 OS에 반환하며 끝냅니다. 만약 실패하거나 문제가 있을 때에는 0 이 아닌 값, 대체로 정수 1 을 반환하며 끝냅니다. 좀더 특수한 문제가 생긴다면, 프로그래머의 마음에 따라 2, 3, 255 등을 반환할 수도 있습니다. 이것을 에러 레벨 (Error Level) 이라고 합니다. 에러 코드 / 탈출 코드 (Exit Code) 라고 부를 수도 있습니다.

그런데 에러 레벨 (Error Level)은 눈에 보이지도 않고, OS가 사용자에게 알려주지도 않습니다.

그러나 윈도우에서 이것을 보는 방법이 있습니다. %ERRORLEVEL% 이라는 암묵적인 환경 변수 안에, 최근에 종료된 프로그램/명령어가 돌려준 값이 들어 있습니다.

echo %ERRORLEVEL%

이런 명령으로 그 값을 볼 수가 있습니다. (윈도98에서는 안되고, 윈도2000/XP 이상에서만 됨.) 그렇지만 이렇게 긴 명령어를 항상 타이핑해 줄 수는 없기에 다음과 같은 짧은 배치 파일을 만들어, el.bat 등의 이름으로 저장해서, 패스(Path)가 걸린 폴더에 넣어두면 편리합니다.
@echo off
echo %ERRORLEVEL%


이제, 어떤 프로그램의 실행이 종료된 직후, el 이라고 치면, 그 프로그램의 에러 레벨이 화면이 나옵니다. 아무 문제 없이 끝났다면 0 이고, 문제가 있다면 0이 아닙니다. (물론 문제가 있어도 에러 레벨을 반환하지 않는 프로그램도 있는데, 이때도 0이 나오긴 합니다.)


el.bat 의 실제 사용법


명령프롬프트에서, dir 이라고 친 후, el 이라고 칩니다. (el 은 위에서 만든 배치입니다.) 그러면 화면에 0 이라는 숫자가 하나 나올 것입니다. dir 이 에러 없이 종료되었기에, dir 이 0 이라는 값을 반환하고 끝낸 것입니다.

이제 dir ddddddd 이렇게 쳐봅니다. 여러분의 하드에 ddddddd 이런 이름을 가진 파일이나 폴더는 없을 것입니다. 따라서 에러가 납니다. 이제 다시 el 이라고 칩니다. 그러면 1 이라는 숫자가 나타날 것입니다. dir이 파일을 찾지 못했기에 즉 에러가 났기에 1이라는 값을 반환하고 끝낸 흔적입니다. 다른 종류의 에러가 났다면 다른 숫자가 나올 수도 있습니다. 아무튼 에러가 나면, 0이 아닌 정수의 값을 반환합니다.

D:\Z>dir
 D 드라이브의 볼륨: Foo
 볼륨 일련 번호: 3894-A721

 D:\Z 디렉터리

2006-07-15  11:53a      <DIR>          .
2006-07-15  11:53a      <DIR>          ..
2006-07-15  11:52a                 217 0.bat
               1개 파일             217 바이트
               2 디렉터리  54,970,830,848 바이트 남음

D:\Z>el
0

D:\Z>dir ddddddd
 D 드라이브의 볼륨: Foo
 볼륨 일련 번호: 3894-A721

 D:\Z 디렉터리

파일을 찾을 수 없습니다.

D:\Z>el
1

D:\Z>





배치 파일 안에서 ERRORLEVEL 활용


만약 wty4yjrrkrktrk24743.txt 라는 파일이 없으면 에러를 내고 배치 파일을 종료하고, 만약 있다면 그 파일을 dir 로 출력하는 예제입니다.

if not "%ERRORLEVEL%" == "0" goto ERROR
이 코드가 핵심입니다. %ERRORLEVEL%이 0이 아니라면 에러가 난 것이기에, 에러 메시지를 출력하는 부분으로 점프하라는 것입니다. 만약 0이라면 에러가 나지 않았다는 의미이기에, 이 조건문은 다음 줄로 무사통과입니다.


@echo off

dir wty4yjrrkrktrk24743.txt
if not "%ERRORLEVEL%" == "0" goto ERROR

goto OK




:ERROR
echo 그런 파일이 없군요! -_-;
goto QUIT




:OK
echo 파일이 있어요 +_+)/
goto QUIT




:QUIT



wty4yjrrkrktrk24743.txt 파일이 없을 때와 있을 때의 실행 결과:


D:\Z>0.bat
 D 드라이브의 볼륨: Foo
 볼륨 일련 번호: 3894-A721

 D:\Z 디렉터리

파일을 찾을 수 없습니다.
그런 파일이 없군요! -_-;

D:\Z>0.bat
 D 드라이브의 볼륨: Foo
 볼륨 일련 번호: 3894-A721

 D:\Z 디렉터리

2006-07-15  11:36a                  82 wty4yjrrkrktrk24743.txt
               1개 파일              82 바이트
               0 디렉터리  54,970,830,848 바이트 남음
파일이 있어요 +_+)/

D:\Z>


여러분의 현재 디렉토리에 wty4yjrrkrktrk24743.txt 라는 이름의 파일이 없을 것입니다. 그래서 이 배치 파일을 실행시키면, "그런 파일이 없군요! -_-;" 라는 에러 메시지가 나옵니다.

만약 wty4yjrrkrktrk24743.txt 라는 파일을 만들어 준다면 "파일이 있어요 +_+)/" 라는 메시지가 나올 것입니다.

※ 단, 윈도98에서는 echo %ERRORLEVEL% 이 작동하지 않습니다. 윈도2000 이상의 OS에서만 됩니다.



결론


중요하거나 위험한 일을 하는 배치 파일에서는, 앞줄에서 실행시킨 명령어의 성공 여부를 %ERRORLEVEL% 을 사용해 면밀히 체크한 후, 다음줄의 명령을 실행해야 합니다. 이것은 그런 체크를 하는 예제입니다.




▶▶ 배치파일] 탈출코드(에러레벨;반환값) 강제로 설정하기 - ERRORLEVEL, Exit Code, Batch File




tag: batch
배치파일 | DOS CMD BATCH .BAT | VBScript .VBS

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top