Как заставить Batch-файл автоматически останавливаться при ошибке
Кто-нибудь знает, существует ли пакетный файл Windows, эквивалентный Unix Stop при ошибке "#!/ Bin / sh -e"?
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.