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