Ответ 1
Используйте % ERRORLEVEL%. Вам не нравится, как пакетные файлы ясны и кратки?:)
Аналогично $?
в Linux, есть ли способ получить статус выхода программы в пакетном файле Windows (.bat
)?
Скажем, например, при успешном выполнении программа имеет System.exit(0)
и System.exit(1)
при сбое, как мне улавливать эти значения выхода в файле .bat
?
Используйте % ERRORLEVEL%. Вам не нравится, как пакетные файлы ясны и кратки?:)
Что-то вроде:
java Foo
set exitcode=%ERRORLEVEL%
echo %exitcode%
Важно сделать это абсолютной следующей строкой командного файла, чтобы избежать перезаписи уровня ошибки:)
Обратите внимание, что если вы используете
IF ERRORLEVEL number
"функция" пакетных файлов, это означает "если уровень ошибки больше или равен number
" - он не основан на равенстве. Я был укушен этим раньше:)
Раймонд Чен имеет хорошее сообщение в блоге ERRORLEVEL не% ERRORLEVEL%. Стоит проверить.
Также стоит отметить, что команда REM, которую большинство людей думает как комментарии, на самом деле - нет. Команда REM представляет собой команду nop, для которой всегда выполняется. После REM уровень ошибки всегда равен 0. Итак
willalwaysfail.bat
REM unless you insert a comment after it
if errorlevel 1 goto fail
никогда не сбой...
в основном отвечая на вопрос bulgar, но дополняя другие ответы:
для% ERRORLEVEL%, чтобы работать, вам нужно, чтобы расширения команд активировались в Windows (это по умолчанию).
За один сеанс:
cmd /E:on
или постоянно в реестре
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01
для более подробной информации:
cmd /?
[]]
Большинство обычных внешних команд возвращают ERRORLEVEL 0, и это обычно (но НЕ обязательно) указывает на отсутствие ошибки:
c:\> dir
...
c:\> echo %ERRORLEVEL%