# 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 ?

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. Oct 1, 2010 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. Oct 1, 2010 at 5:24
• 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 (...) Apr 13, 2015 at 12:59
• Be aware, errorlevel is not an environment variable. Here's a good summary of the pitfalls and subtleties. Jun 17, 2015 at 6:18
• I disagree, it's the perfect place. The question is how to check the exit code of the last command. if the exit code is -1 then we should know about it. Regardless of whether that is an application error code or a system error code, it's still an error code and it should be trapped and handled. I want to know about all errors, so NEQ 0 wins for me every time over GEQ 1... Dec 31, 2019 at 16:10

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%. Jul 18, 2014 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. Nov 13, 2014 at 19:23
• If app2 is the last thing you run in the bat file, the error code will propagate. Jul 5, 2018 at 11:31

I had a batch script in Teamcity pipeline and it did not exit after it's child script did exit with code 1.

To fix the problem I added this string IF %ERRORLEVEL% NEQ 0 EXIT 1 after the child script call.

main-script.bat

...some code
call child-script.bat
IF %ERRORLEVEL% NEQ 0 EXIT 1
...some code


After the child script call exit result is saved to %ERRORLEVEL%. If it did exit with an error %ERRORLEVEL% would not be equal to 0 and in this case we exit with code 1 (error).

Try this:

cd.>nul | call Your_7z_File.Bat && Goto :Next || Goto :Error

:: Or...

cd.>nul | ...\right_path\7z.exe a output_file_name.zip file_to_be_compressed && Goto :Next || Goto :Error



1) Set errorlevel == 0

cd.>nul

2) Redirect by | to simultaneously call Your_7z_File.Bat

cd.>nul | call Your_7z_File.Bat

3) Lets the output/errorlevel to a conditional execution && and || filter the next action

cd.>nul | call Your_7z_File.Bat && Goto :Next || Goto :Error

You can also test it in command line adding echo/:

cd.>nul | call Your_7z_File.Bat && echo\Goto :Next || echo\Goto :Error