2010-12-15 3 views
27

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

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

::x.bat 

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

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

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

ответ

46

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

Примечание конкретно эта линия в MSDN documentation for the If statement:

Равен Номер

Определяет истинное условие только если предыдущая программа управляет Cmd.exe возвратил код выхода равен до или выше Номер.

Так, чтобы проверить на 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 

Дополнительная информация о БАТ программирования: http://www.ericphelps.com/batch/ или, более конкретно, для Windows cmd: MSDN using batch files

+0

, но не проверяет ли это код возврата в точности 1 ? – 2010-12-15 14:42:40

+0

@Armen: Вот почему вам нужно проверить коды возврата в * обратном порядке. Начните с максимально возможного числа и спуститесь к нулю. Изменить: я только понял, что ваш вопрос спрашивает, как проверить, является ли код возврата * ненулевым *. В этом случае `ERRORLEVEL` именно то, что вы хотите. Сообщение, опубликованное Eduard, вернет TRUE, если код возврата равен или превышает указанное значение. – 2010-12-15 14:46:28

+0

Вы имеете в виду, что нет возможности напрямую проверить, что какая-то переменная не равна некоторому значению? – 2010-12-15 14:47:20

3

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

call myExe.exe 
if errorlevel 1 (
    goto build_fail 
) 

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

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

Как написать составную инструкцию с если?

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

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 
)