배치 파일에서 마지막 명령의 종료 코드를 확인하는 방법은 무엇입니까?


답변:


78

1 이상의 리턴 코드를 테스트하십시오.

if ERRORLEVEL 1 echo Error

또는

if %ERRORLEVEL% GEQ 1 echo Error

또는 0과 같은 리턴 코드를 테스트하십시오.

if %ERRORLEVEL% EQU 0 echo OK

GOTO내가 표시 하는 위치 와 같은 다른 명령을 사용할 수 있습니다 echo.


나는 당신의 코드를 시도했다. 다음과 같은 오류가 발생했습니다.0 was unexpected this time.
Misha Moroshko

2
@ 미샤 : 당신은 내가 원래 게시 한 방식으로 백분율 기호로 시도했을 수 있습니다. 그것들없이 시도하거나 내가 추가 한 다른 버전을 사용해보십시오.
Dennis Williamson

2
%ERRORLEVEL%오류가 발생한 경우에도 0 인 사례를 발견 했습니다. %ERRORLEVEL%cmd 파일을 체크인 할 때 발생했습니다 . 노력 start /wait하지 않았다. 효과가 있었던 유일한 것은if errorlevel 1 (...)
AlikElzin-kilaka

4
errorlevel은 환경 변수아닙니다 . 함정과 미묘함에 대한 좋은 요약입니다 .
Nick Westgate

음수 리턴 코드 감지를 지원하는 NEQ대신 사용 하는 것이 좋습니다 EQU. Windows XP가 그렇게하는지 모릅니다. 그러나 그것은 현대 Windows에서 일입니다.
binki

10

이것은 실제로 다음과 같은 경우에 작동합니다. App1.exe 호출-> .bat 실행-> app2.exe

App2는 오류 수준 1을 반환하지만 .bat에서이를 잡아서 app1에 다시 올리십시오. 그렇지 않으면 .bat는 오류 수준을 먹고 app1은 절대 알 수 없습니다.

방법:

.bat에서 :

app2.exe
if %ERRORLEVEL% GEQ 1 EXIT /B 1

app2 이후의 오류 수준을 확인합니다. > 0이면 .bat가 종료되고 호출 app1에 대해 errorlevel을 1로 설정합니다.


4
app1에 동일한 오류를 다시 반환하면 더 좋을 수 있습니다. 나는 이것을 시도하지 않았지만 작동해야합니다 : if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Viktor Fonic

2
최소한 Windows에서는 % ERRORLEVEL %이 음수가 될 수 있습니다 (예 : 오류시 -1을 반환하는 프로그램이 있습니다). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%더 나은 옵션이 될 수 있습니다. 그러나 실제로 프로그램이 오류에 대해 반환하는 것을 알아야합니다. 일부 프로그램은 특수 유형의 성공을 위해 0이 아닌 특정 코드를 반환합니다.
Euro Micelli

bat2 파일에서 app2를 마지막으로 실행하면 오류 코드가 전파됩니다.
AnrDaemon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.