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?

- 12,251
- 8
- 58
- 92

- 7,323
- 3
- 30
- 40
5 Answers
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 :)

- 1,421,763
- 867
- 9,128
- 9,194
-
I had a slight problem with this answer ... AFAIK, you can't use space in the set command, so it should be set exitcode=%ERRORLEVEL%. Anyway, making that change worked for me. – Richard Fawcett Apr 24 '12 at 14:44
Use %ERRORLEVEL%. Don't you love how batch files are clear and concise? :)

- 278,309
- 50
- 514
- 539
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...

- 63,317
- 21
- 138
- 197
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 /?
[]]

- 28,957
- 10
- 64
- 87
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%

- 114,442
- 31
- 189
- 228