Как получить статус выхода программы Java в пакетном файле Windows

Аналогично $? в Linux, есть ли способ получить статус выхода программы в пакетном файле Windows (.bat)?
Скажем, например, при успешном выполнении программа имеет System.exit(0) и System.exit(1) при сбое, как мне улавливать эти значения выхода в файле .bat?

Ответ 1

Используйте % ERRORLEVEL%. Вам не нравится, как пакетные файлы ясны и кратки?:)

Ответ 2

Что-то вроде:

java Foo
set exitcode=%ERRORLEVEL%
echo %exitcode%

Важно сделать это абсолютной следующей строкой командного файла, чтобы избежать перезаписи уровня ошибки:)

Обратите внимание, что если вы используете

IF ERRORLEVEL number

"функция" пакетных файлов, это означает "если уровень ошибки больше или равен number" - он не основан на равенстве. Я был укушен этим раньше:)

Ответ 3

Раймонд Чен имеет хорошее сообщение в блоге ERRORLEVEL не% ERRORLEVEL%. Стоит проверить.

Также стоит отметить, что команда REM, которую большинство людей думает как комментарии, на самом деле - нет. Команда REM представляет собой команду nop, для которой всегда выполняется. После REM уровень ошибки всегда равен 0. Итак

willalwaysfail.bat
REM unless you insert a comment after it
if errorlevel 1 goto fail

никогда не сбой...

Ответ 4

в основном отвечая на вопрос bulgar, но дополняя другие ответы:

для% ERRORLEVEL%, чтобы работать, вам нужно, чтобы расширения команд активировались в Windows (это по умолчанию).
За один сеанс:

cmd /E:on

или постоянно в реестре

 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01

для более подробной информации:

cmd /?

[]]

Ответ 5

Большинство обычных внешних команд возвращают ERRORLEVEL 0, и это обычно (но НЕ обязательно) указывает на отсутствие ошибки:

c:\> dir
...
c:\> echo %ERRORLEVEL%