2013-01-18 2 views
3

Например, в пакетном файле, я напечатал следующую команду:Как узнать, успешно ли выполнена команда через пакетный файл?

хсору C: \ fileA.txt D: \ Dir \/у/д

Это не получится совсем, если бы не был файл файл fileA.txt. Но я хочу знать, не сработает ли он, а затем вывести некоторые сообщения пользователю. Как я могу это сделать?

Любая помощь будет благодарна, спасибо!

+0

возможно дубликат [безопасным способом проверить ненулевой (ошибку) код возврата в окнах пакетного файла ] (http://stackoverflow.com/questions/10935693/foolproof-way-to-check-for-nonzer-error-return-code-in-windows-batch-file) – dbenham

ответ

10

Большинство команд/программ возвращают 0 на успех и некоторое другое значение, называемое errorlevel, чтобы сигнализировать об ошибке.

Вы можете проверить это в вас партии, например, путем

if not errorlevel 0 goto ERR 

XCopy errorlevels:

0 - Все файлы были скопированы без ошибок

1 - не было найдено ни одного файла для копирования (недопустимый источник)

2 - XCOPY был прерван Ctrl-C до того, как копирование было завершено

4 - Произошла ошибка инициализации.

5 - Произошла ошибка записи на диск.

[1] http://m.computing.net/answers/dos/xcopy-errorlevels/7510.html

+0

Спасибо! Я не знаю, существует ли переменная, используемая для хранения возвращаемого значения раньше. К моему дальнейшему тестированию я должен проверить значение уровня ошибок от большого числа до небольшого числа. В противном случае он будет работать ненормально. – SeaStar

+0

Правильно! Как отмечается в ссылке в другом ответе, 'if errorlevel' имеет это странное свойство: * он возвращает TRUE, если код возврата был равен или выше указанного уровня ошибок *. – shinjin

3

Я думаю, что вас интересует «уровень ошибок». См. http://www.robvanderwoude.com/errorlevel.php. В основном, в пакетном файле, вы можете проверить код состояния команды (по аналогии с Unix или Linux), говоря

IF ERRORLEVEL 1 <do something> 
IF ERRORLEVEL 2 <do something> 

, где 1 и 2 являются возможными значениями коды состояния, возвращаемой последней программой, выполняемой. Вы также можете сделать что-то вроде

echo %ERRORLEVEL% 

распечатать код состояния, но учтите, что это не всегда ведет себя как «нормальное» переменное окружение. Одна вещь, которая делает ее другой, заключается в том, что она не отображается с командой «set».

+0

Большое спасибо! Мне тоже помогает. Но я боюсь, что могу принять только один ответ. – SeaStar

2

я нашел принятый ответ не работаю, но это сделало:

if %ERRORLEVEL% neq 0 goto ERR 
Смежные вопросы