views:

65

answers:

2

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  A: 

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.

Hellion
Also, since around Windows 2000, there's a "virtual" environment variable called `%ERRORLEVEL%` that can be tested with `==`, `EQU`, `LSS`, etc.
Jim Davis
Perfect! Thanks.
Ziplin
Oh, for posterity, to make it stop on error, after :somethingbad, use a "pause" command
Ziplin
You 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
@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
Woah! I hadn't thought of that. That's awful.
Jim Davis
+2  A: 

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.

Cheran S
Very cool, compact, and actually more readable I'd say
Ziplin