Назад | Перейти на главную страницу

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

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

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

На самом деле нет хорошего способа делать то, что вы хотите, учитывая дизайн оболочки в 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.