Ответ 1
Трюк использует поведение каретки.
Также объяснено, что Long команды разделены на несколько строк в пакетном (.bat) файле Windows Vista
Каретка является escape-символом для следующего символа, или на конце линии используется как многострочный символ, но это почти то же самое.
В конце строки он просто ускользает от следующего символа, в этом случае <Linefeed>
, но есть скрытая функция, поэтому, если экранированный символ является <LF>
он игнорируется, а следующий символ считывается и экранируется, но это charater всегда будет сбежать, даже если это также <LF>
.
Теперь вы можете понять
set NLM=^
rem Two empty lines are required here
NLM-Variable содержит ровно один символ <LF>
. Но если вы попытаетесь использовать его с echo Line1%NLM%Line2
он не сработает, так как синтаксический анализатор прекратит синтаксический анализ на одном <LF>
.
Но это работает
echo Line1^
Line2
Таким образом, вам нужно добавить escape-строку в строку, и это NL-Variable. NL-Variable состоит только из трех символов. NL=^<LF><LF>
И если он расширен, он создает только один экранированный <LF>
как первый <LF>
после того, как карет будет проигнорирован.
Btw. На мой взгляд, гораздо проще использовать линейные переводы с задержкой расширения, так как нет необходимости ничего скрывать.
В этом примере я использую %=EMPTY=%
вместо пустой строки (для самостоятельного комментирования), но поскольку переменная =EMPTY=
не может существовать, она будет расширена до пустой строки.
setlocal EnableDelayedExpansion
(set NLM=^
%=EMPTY=%
)
echo Line1!NLM!Line2
EDIT: добавьте полезные советы, используя <LF>
1) Используйте его как новую строку в echo
setlocal EnableDelayedExpansion
(set LF=^
%=EMPTY=%
)
echo Line1!LF!Line2
2) Используйте его для разделения команд в блоке скобок
setlocal EnableDelayedExpansion
(set LF=^
%=EMPTY=%
)
(
echo Line1%LF%set x=4%LF%echo !x!%LF%
)
3) Создайте (почти) пустой EOL-chararcter в цикле FOR/F, так как <LF>
является разделителем строк, EOL <LF>
является тем же, что и пустой.
FOR /F ^"eol^=^
delims^=^" %%a in (myFile.php) do echo %%a
4) Используйте LF для разделения текста в цикле FOR/F
setlocal EnableDelayedExpansion
(set LF=^
%=EMPTY=%
)
set "var=Content1;Content2"
FOR /F "delims=" %%a in ("%var:;=!LF!%") do (
echo %%a
)