Как получить статус завершения Java-программы в командном файле Windows - PullRequest
25 голосов
/ 20 мая 2009

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

Ответы [ 5 ]

27 голосов
/ 20 мая 2009

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

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

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

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

IF ERRORLEVEL number

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

27 голосов
/ 20 мая 2009

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

19 голосов
/ 20 мая 2009

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

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

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

никогда не подведет ...

1 голос
/ 26 октября 2009

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

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

cmd /E:on

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

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

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

cmd /?

[]]

0 голосов
/ 20 мая 2009

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

c:\> dir
...
c:\> echo %ERRORLEVEL%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...