Как разделить длинные команды на несколько строк в командном файле?
batch-file
Ондра Жижка
источник
источник
^
и после текста вашей команды.echo
.co^␍py ^␍file1 ^␍file2
. Я предлагаю вам удалить свой комментарий, чтобы избежать путаницы, тем более что этот вопрос такой популярныйПравило для кареты:
Каретка в конце строки добавляет следующую строку, первый символ добавленной строки будет экранирован.
Вы можете использовать каретку несколько раз, но максимальная длина строки не должна превышать 8192 символа (Windows XP, Windows Vista и Windows 7).
Чтобы подавить выход следующего символа, вы можете использовать перенаправление.
Перенаправление должно быть перед кареткой. Но существует одно любопытство с перенаправлением перед каретой.
Если вы поместите токен в каретку, он будет удален.
И также возможно встраивать перевод строки в строку:
Пустая строка важна для успеха. Это работает только с отложенным расширением, иначе остальная часть строки игнорируется после перевода строки.
Это работает, потому что каретка в конце строки игнорирует следующий перевод строки и экранирует следующий символ, даже если следующий символ также является переводом строки (возврат каретки всегда игнорируется в этой фазе).
источник
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
не работает! Я должен был добавить пробел:copy ^[newline] "file1.txt" ^[newline] "file2.txt"
.(Это, в основном, переписывание ответа Уэйна, но с путаницей вокруг прояснения каретки. Поэтому я опубликовал его как CW. Я не стесняюсь редактировать ответы, но полностью переписывать их кажется неуместным)
Вы можете разбить длинные строки с помощью caret (
^
), просто помните, что символ вставки и последующий символ строки полностью удаляются из команды, поэтому, если вы поставите его там, где потребуется пробел (например, между параметрами), убедитесь, что также включить пробел (либо перед^
, либо в начале следующей строки - этот последний выбор может помочь прояснить, что это продолжение).Примеры: (все протестировано на Windows XP и Windows 7)
можно записать как:
или
или даже
(Это последнее работает, потому что между пробелами
xc
и^
и нет пробелов, а в начале следующей строки пробелов нет. Поэтому, когда вы удаляете^
и новую строку , вы получаете ....xcopy
)Для удобочитаемости и здравомыслия, вероятно, лучше разбивать только между параметрами (не забудьте указать пробел).
Убедитесь, что
^
это не последнее, что есть в командном файле, так как это, похоже, является серьезной проблемой .источник
Несколько команд могут быть помещены в круглые скобки и распределены по многочисленным строкам; так что-то вроде
echo hi && echo hello
можно поставить так:Также переменные могут помочь:
Кроме того, я заметил с помощью carets (
^
), чтоif
условным выражениям нравилось, что они следовали только при наличии пробела:источник
cmd1.bat && cmd2.bat
отличается от формы parens: выполняется,cmd2.bat
еслиcmd1.bat
выполняется успешно (-без настройки%errorcode%
). Последняя форма выполняется безоговорочно. Несколько неожиданным (по крайней мере для меня) является то, что, очевидно, вы не можете использовать комбинацию обоих +, то есть добавить&&
до разрыва строки.( echo <line break here> hello )
приводит к пустой строке.Тем не менее, кажется, что разбиение по середине значений цикла for не нуждается в каретке (и попытка его использовать будет считаться синтаксической ошибкой). Например,
Обратите внимание, что после приветствия или до свидания даже не требуется места.
источник
for
синтаксиса: разделителями элементов в «for-set» являются пробел, запятая, точка с запятой, знак равенства, символ табуляции и новые строки.do
часть содержит несколько вложенныхif-else
операторов?