5 ответов:
вы можете разбить длинные линии с кареткой
^пока вы помните, что курсор и новая строка после него полностью удалены. Итак, если должно быть место, где вы нарушаете линию, включите пробел. (подробнее об этом ниже.)пример:
copy file1.txt file2.txtбудет написано как:
copy file1.txt^ file2.txt
правило для каретки:
курсор в конце строки, добавляет следующую строку, первый символ добавленной строки будет экранирован.
вы можете использовать каретку несколько раз, но полная строка не должна превышать максимальную длину строки ~8192 символов (Windows XP, Windows Vista и Windows 7).
echo Test1 echo one ^ two ^ three ^ four^ * --- Output --- Test1 one two three four* echo Test2 echo one & echo two --- Output --- Test2 one two echo Test3 echo one & ^ echo two --- Output --- Test3 one two echo Test4 echo one ^ & echo two --- Output --- Test4 one & echo twoчтобы подавить экранирование следующего символа, вы можете использовать перенаправление.
перенаправление должно быть непосредственно перед знак вставки. Но есть одно любопытство с перенаправлением перед кареткой.
Если вы поместите маркер в каретку, маркер будет удален.
echo Test5 echo one <nul ^ & echo two --- Output --- Test5 one two echo Test6 echo one <nul ThisTokenIsLost^ & echo two --- Output --- Test6 one twoи это также возможно встроить линии питания в строку:
setlocal EnableDelayedExpansion set text=This creates ^ a line feed echo Test7: %text% echo Test8: !text! --- Output --- Test7: This creates Test8: This creates a line feedпустая строка важна для успеха. Это работает только с задержкой расширения, иначе остальная часть строки игнорируется после подачи строки.
это работает, потому что курсор в конце строки игнорируются следующая подача строки и экранирует следующий символ, даже если следующий символ также является подачей строки (возврат каретки всегда игнорируется на этом этапе).
(это в основном рерайт ответ Уэйна но с путаницей вокруг каре прояснилось. Поэтому я разместил его как CW. Я не стесняюсь редактировать ответы, но полностью переписать их кажется неуместным.)
вы можете разбить длинные линии с кареткой (
^), просто помните, что каретка и новая строка, которая следует за ней полностью удалены из команды, так что если вы поместите его там, где a потребуется пространство (например, между параметрами), обязательно включите пространство также (либо перед^, или в начале следующей строки - Этот последний выбор может помочь сделать его более ясным, это продолжение).примеры: (все протестировано на Windows XP и Windows 7)
xcopy file1.txt file2.txtможно написать так:
xcopy^ file1.txt^ file2.txtили
xcopy ^ file1.txt ^ file2.txtили даже
xc^ opy ^ file1.txt ^ file2.txt(последнее работает, потому что нет пробелы между
xcи^, и без пробелов в начале следующей строки. Поэтому, когда вы удалите^и новая строка, вы получите...xcopy.)для удобства чтения и здравомыслия, вероятно, лучше всего разбивать только между параметрами (обязательно включите пробел).
будьте уверены, что
^и не последнее, что есть в пакетном файле, так как там кажется, это главная проблема с этим.
несколько команд могут быть заключены в скобки и распределены по многочисленным строкам; так что что-то вроде
echo hi && echo helloможно поставить так:( echo hi echo hello )переменные также могут помочь:
set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE" if exist %AFILEPATH% ( start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING... ) else ( ...также я заметил с каретками (
^), чтоifусловным обозначениям нравилось, чтобы они следовали только в том случае, если присутствует пробел:if exist ^
однако кажется, что разделение в середине значений цикла for не требует каретки (и на самом деле попытка использовать его будет считаться синтаксической ошибкой). Например,
for %n in (hello bye) do echo %nобратите внимание, что нет места даже не требуется после Привет или до свидания.
Comments