Как заставить Batch-файл автоматически останавливаться при ошибке

Кто-нибудь знает, существует ли пакетный файл Windows, эквивалентный Unix Stop при ошибке "#!/ Bin / sh -e"?

( http://www.turnkeylinux.org/blog/shell-error-handling)

2 ответа

На самом деле нет хорошего способа сделать то, что вы хотите, учитывая дизайн оболочки в Windows (унаследованный от MS-DOS).

Вообще говоря, CMD.EXE и COMMAND.COM беспечно продолжают выполнять командные файлы даже в случае ошибок. Проверка errorlevel программ, которые вы вызываете, - это все, что у вас есть для обработки ошибок. Большинство неверно сформированных команд оболочки будут рассматриваться как программы для выполнения (и, надеюсь, любая выполняемая программа не сделает ничего плохого).

Ошибки в синтаксисе конструкций типа if exists или же for заставит оболочку прекратить выполнение скрипта. Рассматривать:

@echo off
if not exits c:\foo.txt echo C:\foo.txt does not exist
echo Continuing on

Вы никогда не увидите Continuing on потому что переводчик будет бомбить с ошибкой c:\foo.txt was unexpected at this time., К сожалению, нет способа отлавливать и обрабатывать ошибки, как в bash. Когда вы нажимаете на такую ​​ошибку, скрипт останавливается.

В общем, обработка ошибок в оболочке Windows очень не сложна.

Можно утверждать, что менее плохой способ немедленно остановить пакет при ошибке - использовать каждую "инструкцию", например:

скопировать%UNEXISTING% C:\ || (Эхо-файл ошибки% UNEXISTING% не существует и EXIT /B 1)

С || остальная часть следующей команды в той же строке выполняется, только если уровень ошибки предыдущей команды отличается от 0.

Другие вопросы по тегам