I have a batch file that runs a couple executables, and I want it to exit on success, but stop if the exit code <> 0. How do I do this?
3 Answers
Sounds like you'll want the "If Errorlevel" command. Assuming your executable returns a non-0 exit code on failure, you do something like:
myProgram.exe
if errorlevel 1 goto somethingbad
echo Success!
exit
:somethingbad
echo Something Bad Happened.
Errorlevel checking is done as a greater-or-equal check, so any non-0 exit value will trigger the jump. Therefore, if you need to check for more than one specific exit value, you should check for the highest one first.

- 1,740
- 28
- 36
-
4Also, since around Windows 2000, there's a "virtual" environment variable called `%ERRORLEVEL%` that can be tested with `==`, `EQU`, `LSS`, etc. – Jim Davis Aug 10 '10 at 19:13
-
2Oh, for posterity, to make it stop on error, after :somethingbad, use a "pause" command – Dlongnecker Aug 11 '10 at 20:08
-
5You don't want to use `exit` in there as that kills the shell. Either use `goto :EOF` or `exit /b` so that just the batch file terminates. – Joey Aug 11 '10 at 21:44
-
@Jim: You should always delete that variable with `set ERRORLEVEL=` at the start of your batch if you intend to use it, as the function of the pseudo-variable can be shadowed by creating an actual variable with that name. And since the environment is passed from the parent process ... you can never be sure. – Joey Aug 11 '10 at 21:45
-
Woah! I hadn't thought of that. That's awful. – Jim Davis Aug 16 '10 at 19:04
You can also use conditional processing symbols to do a simple success/failure check. For example:
myProgram.exe && echo Done!
would print Done!
only if myProgram.exe
returned with error level 0.
myProgram.exe || PAUSE
would cause the batch file to pause if myProgram.exe returns a non-zero error level.

- 8,319
- 1
- 33
- 40
-
-
4So you could do: `myProgram.exe || exit /b 1` to stop the rest of the commands? – rakslice Aug 01 '14 at 18:46
-
-
Looks like you can chain those two... `&& pause || pause` pauses either way, eg. Or, perhaps more useful, `&& (echo success & pause) || (echo fail & pause)` – ruffin Aug 17 '22 at 21:22
A solution better than Hellion's answer is checking the %ERRORLEVEL%
environment variable:
IF %ERRORLEVEL% NEQ 0 (
REM do something here to address the error
)
It executes the IF
body, if the return code is anything other than zero, not just values greater than zero.
The command IF ERRORLEVEL 1 ...
misses the negative return values. Some progrmas may also use negative values to indicate error.
BTW, I love Cheran's answer (using &&
and ||
operators), and recommend that to all.
For more information about the topic, read this article

- 17,853
- 3
- 55
- 72