Многострочный оператор комбинатора && для объединения команд в пакетный файл

Многострочный оператор комбинатора && для объединения команд в пакетный файл

Я понимаючто этот оператор используется в Windows (и может быть Linux?) для объединения/связывания нескольких команд в одну строку. Команды выполняются одна за другой, пока предыдущая завершается успешно (код выхода 0).

Однако я не понимаю, можно ли использовать его в пакетном файле, где вы указываете команды одну за другой, по одной команде на строку. Как добиться того же эффекта в этом случае?Как разделить cmd1 && cmd2 && cmd3на несколько строк?Как вы прекращаете

cmd1
cmd2
cmd3

как только первая команда не сработает?

Мне бы также хотелось узнать имя оператора, чтобы позже самому найти ответ на подобные вопросы.

решение1

cmd1 && cmd2 && cmd3

можно записать в несколько строк как

cmd1
if not errorlevel 1 cmd2
if not errorlevel 1 cmd3

где выполнение каждой команды будет зависеть от результата предыдущей

решение2

В GNU/Linux я могу разделить команду cmd1 && cmd2 && cmd3на несколько строк (например, для удобства чтения) в файле скрипта следующим образом:

cmd1 &&
cmd2 &&
cmd3

решение3

Разница между ними:

cmd1
cmd2
cmd3

будет запускать каждую команду по отдельности и позволит завершить пакетное задание, если вы нажмете Ctrl+ cдо завершения одного из них.

Тогда как

cmd1 && cmd2 && cmd3

запустит команды одну за другой, но, не глядя на скрипт/за один раз.

Для дальнейшего примера,

Возьмем первый пример: если вы редактируете скрипт во время работы cmd1 и меняете cmd2 на cmd3, он загрузит cmd3 после завершения работы cmd1.

В Linux, если я это сделаю, ifdown eth0я потеряю свой сеанс SSH, поэтому вместо этого я объединяю ifdown eth0 && ifup eth0команды в цепочку.

Если вы хотите что-то сделать в отношении сбоев, вам следует обратить внимание на операторы if и переключатели, а также на коды возврата и уровни ошибок.Линки.

решение4

Для пакетного файла необходимо добавить разделитель ^ после каждой условной операции && (или ||). Например:

echo 1 && ^
echo 2 && ^
copy >null && ^
echo 4

Связанный контент