25

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?

5 Answers 5

29

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

Sign up to request clarification or add additional context in comments.

1 Comment

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

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

Comments

20

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

Comments

1

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

[]]

Comments

0

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%

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.