Reputation: 7423
Analogous to the $?
in Linux, is there a way to get the exit status of a program in a Windows batch file (.bat
)?
Say for example the program has a System.exit(0)
upon successful execution, and a System.exit(1)
upon a failure, how do I trap these exit values in a .bat
file?
Upvotes: 25
Views: 40530
Reputation: 1499860
Something like:
java Foo
set exitcode=%ERRORLEVEL%
echo %exitcode%
It's important to make this the absolute next line of the batch file, to avoid the error level being overwritten :)
Note that if you use the
IF ERRORLEVEL number
"feature" of batch files, it means "if the error level is greater than or equal to number
" - it's not based on equality. I've been bitten by that before now :)
Upvotes: 29
Reputation: 29680
mostly answering bulgar's question, but complementing the other answers:
for %ERRORLEVEL% to work you need to have the command extensions activated in Windows (it's the default).
For one session:
cmd /E:on
or permanently in the registry
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01
for more details:
cmd /?
[]]
Upvotes: 1
Reputation: 64404
Raymond Chen has a good blog post named ERRORLEVEL is not %ERRORLEVEL%. Worth checking out.
Also worth noting is that the REM command which most people think of as comments, really aren't. The REM command is a nop command which always succeeds. After a REM, the error level is always 0. So
willalwaysfail.bat
REM unless you insert a comment after it
if errorlevel 1 goto fail
will never fail...
Upvotes: 20
Reputation: 116314
Most of the usual external command operations return ERRORLEVEL 0 and this usually (but NOT invariably) indicates that no error was encountered:
c:\> dir
...
c:\> echo %ERRORLEVEL%
Upvotes: 0
Reputation: 284786
Use %ERRORLEVEL%. Don't you love how batch files are clear and concise? :)
Upvotes: 28