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


답변:


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.