# How to check the exit code of the last command in batch file?

Inside a batch file on Windows, I use 7-zip like this:

...\right_path\7z a output_file_name.zip file_to_be_compressed


How could I check the exit code of 7z and take the appropriate action ?

-
Also asked on Stackoverflow: How do I get the application exit code from a Windows command line? – Deanna Jun 24 '13 at 11:42

Test for a return code greater than or equal to 1:

if ERRORLEVEL 1 echo Error


or

if %ERRORLEVEL% GEQ 1 echo Error


or test for a return code equal to 0:

if %ERRORLEVEL% EQU 0 echo OK


You can use other commands such as GOTO where I show echo.

-
I tried your code. I got the following error: 0 was unexpected this time. – Misha Moroshko Oct 1 '10 at 5:13
@Misha: You may have tried it with the percent signs the way I originally posted it. Try it without them or try the other versions I added. – Dennis Williamson Oct 1 '10 at 5:24
Great, thanks a lot !! – Misha Moroshko Oct 1 '10 at 11:53
Found cases where %ERRORLEVEL% is 0 even though an error occurred. Happened when checking %ERRORLEVEL% in a cmd file. Trying start /wait didn't work. The only thing that worked is if errorlevel 1 (...) – AlikElzin-kilaka Apr 13 '15 at 12:59
Be aware, errorlevel is not an environment variable. Here's a good summary of the pitfalls and subtleties. – Nick Westgate Jun 17 '15 at 6:18

This really works when you have: App1.exe calls -> .bat which runs --> app2.exe

App2 returns errorlevel 1... but you need to catch that in the .bat and re-raise it to app1... otherwise .bat eats the errorlevel and app1 never knows.

Method:

In .bat:

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


This is a check after app2 for errorlevel. If > 0, then the .bat exits and sets errorlevel to 1 for the calling app1.

-
it could be even better if you returned the same error back to app1. i didn't try this out, but it should work : if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%. – Viktor Fonic Jul 18 '14 at 11:24
At least in Windows, %ERRORLEVEL% can be a negative number (e.g. I have a program that returns -1 on errors). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL% might be a better option. But you really need to know what the program returns on errors. Some programs return certain non-zero codes for special types of success. – Euro Micelli Nov 13 '14 at 19:23