1

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

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

cmd1
cmd2
cmd3

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

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

4 ответа4

1
cmd1 && cmd2 && cmd3

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

cmd1
if not errorlevel 1 cmd2
if not errorlevel 1 cmd3

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

1

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

cmd1 &&
cmd2 &&
cmd3
0

Разница между ними такова:

cmd1
cmd2
cmd3

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

В то время как

cmd1 && cmd2 && cmd3

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

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

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

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

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

0

Как && работает?

Однако я не понимаю, можно ли его использовать в командном файле, где вы задаете команды одну за другой, по одной команде в строке

Остальная часть этого ответа для пакетных файлов Windows.


Как разделить cmd1 && cmd2 && cmd3 на несколько строк?

Команды могут быть разделены с помощью if и %errorlevel%

Setlocal EnableDelayedExpansion
cmd1
if !ERRORLEVEL! equ 0 (
  cmd2
  if !ERRORLEVEL! equ 0 (
    cmd3
    )
  )

Я также хотел бы знать имя оператора &&

Оператор && является одним из двух условных операторов. Другой || ,

commandA && commandB Запустить commandA , если это удастся, запустить commandB

commandA || commandB Запустить commandA , если не получится, запустить commandB

Перенаправление источника


Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .