Подтвердить что ты не робот

Проверьте, возвращает ли процесс 0 командный файл

Я хочу начать процесс с командного файла, и если он возвращает ненулевое значение, сделайте что-нибудь еще. Мне нужен правильный синтаксис для этого.

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

::x.bat

@set RetCode=My.exe
@if %retcode% is nonzero
   handleError.exe

В качестве бонуса вы можете ответить на следующие вопросы:)

  • Как написать составной оператор с if?
  • Если приложение My.exe не запускается, потому что некоторая DLL отсутствует, будет ли моя работа if? Если нет, как я могу обнаружить, что My.exe не удалось запустить?
4b9b3361

Ответ 1

ERRORLEVEL будет содержать код возврата последней команды. К сожалению, вы можете проверить только >=.

Обратите внимание на эту строку в документации MSDN для оператора If:

номер ошибки

Задает значение true условие, только если предыдущая программа запускаемый Cmd.exe, возвратил код выхода равное или большее, чем Number.

Итак, чтобы проверить на 0, вам нужно подумать нестандартно:

IF ERRORLEVEL 1 GOTO errorHandling
REM no error here, errolevel == 0
:errorHandling

Или если вы хотите сначала обработать ошибки обработки ошибок:

IF NOT ERRORLEVEL 1 GOTO no_error
REM errorhandling, errorlevel >= 1
:no_error

Дополнительная информация о программировании BAT: http://www.ericphelps.com/batch/ Или более конкретно для Windows cmd: MSDN с использованием пакетных файлов

Ответ 2

Как написать составной оператор с если?

Вы можете написать составной оператор в блоке if с помощью скобок. Первая скобка должна появиться на линии с линией if и второй по строке.

if %ERRORLEVEL% == 0 (
    echo ErrorLevel is zero
    echo A second statement
) else if %ERRORLEVEL% == 1 (
    echo ErrorLevel is one
    echo A second statement
) else (
   echo ErrorLevel is > 1
   echo A second statement
)

Ответ 3

В проекте, над которым я работаю, мы делаем что-то подобное. Мы используем ключевое слово errorlevel так, чтобы оно выглядело следующим образом:

call myExe.exe
if errorlevel 1 (
  goto build_fail
)

Это похоже на нас. Обратите внимание, что вы можете поместить несколько команд в parens, как эхо или что-то еще. Также обратите внимание, что build_fail определяется как:

:build_fail
echo ********** BUILD FAILURE **********
exit /b 1

Ответ 4

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

Итак, вот ответ на это:

if %ERRORLEVEL% NEQ 0 exit %ERRORLEVEL%