Коды возврата скрипта оконной оболочки - PullRequest
3 голосов
/ 04 марта 2010

Существует ли стандартный набор кодов возврата для сценариев оболочки Windows (файлы * .bat)? Я ищу что-то похожее на коды выхода Linux, где 0 == успех и ненулевой == сбой. Мне нужен способ программно проверить, не завершился ли мой сценарий оболочки во время выполнения.

Ответы [ 5 ]

2 голосов
/ 04 марта 2010

0 для успеха и не 0 для сбоя также является соглашением для пакетных команд Windows. когда команда не выполняется, она устанавливает ERRORLEVEL - специальную переменную, которую можно проверить в пакетных файлах.

if errorlevel 1 goto failure

До тех пор, пока вы не выполните другую команду, уровень ошибки будет передаваться вызывающей стороне, запустившей файл .bat.

2 голосов
/ 04 марта 2010

Самым распространенным примитивом является то же, что и в стандарте Unix, поэтому код возврата (также называемый уровнем ошибки в пакетных файлах), равный 0, является успешным, тогда как все, что больше 0, является ошибкой.

Есть несколько связанных с этим проблем, но посмотрите на это руководство:

Пакетные файлы - уровни ошибок

1 голос
/ 04 марта 2010

Обычно утилиты Windows возвращают 0 в случае успеха и ненулевое значение в случае ошибки (через переменную ERRORLEVEL), как это делают приложения Linux. К сожалению, не существует обязательного, официального «стандарта», и не каждая утилита или сценарий устанавливает уровни ошибок.

Если у вас есть сценарий, для которого вы хотите проверить состояние возврата, убедитесь, что сценарий завершается с использованием EXIT /B ##, в результате чего уровень ошибки устанавливается на ##.

1 голос
/ 04 марта 2010

Вы можете проверить значение уровня ошибки.

Помощь оператора оболочки IF сообщает мне следующее:

IF [NOT] ERRORLEVEL number command

  ERRORLEVEL number Specifies a true condition if the last program run
                    returned an exit code equal to or greater than the number
                    specified.
0 голосов
/ 20 марта 2013

Я предпочитаю так:

[run an exe here]

IF %errorlevel% NEQ 0 (
    CALL :SSH_fail filename.sh %errorlevel%
)


:SSH_fail
    Email.exe "%mailTo%" "%mailProgram% - SSH Failure " "Body: errorlevel:%~2 file name: %~1"
goto cont

так я точно знаю, какой был уровень ошибки.Я думаю, что может быть до 250 уровней ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...