How to get the exit status of a Java program in Windows batch file

39,680

Solution 1

Use %ERRORLEVEL%. Don't you love how batch files are clear and concise? :)

Solution 2

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

Solution 3

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...

Solution 4

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

[]]

Share:
39,680

Related videos on Youtube

pugmarx
Author by

pugmarx

Passions: Technology | Travel | Food

Updated on April 25, 2020

Comments

  • pugmarx
    pugmarx about 4 years

    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?

  • Richard Fawcett
    Richard Fawcett about 12 years
    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.