El truco utiliza el comportamiento del cursor.
también explicó en Long commands split over multiple lines in Vista/DOS batch (.bat) file
El símbolo de intercalación es un carácter de escape para el siguiente carácter, o en la línea de fondo se utiliza como carácter de líneas múltiples, pero esto es casi la misma.
En el extremo de la línea, simplemente se escapa el siguiente carácter, en este caso <Linefeed>
, pero hay una función oculta, por lo que si el carácter escapado es <LF>
se ignora y se lee y se escapa el siguiente carácter, pero esto charater siempre se escapará, incluso si también es un <LF>
.
Ahora se puede entender
set NLM=^
rem Two empty lines are required here
La NLM-variable contiene exactamente un <LF>
carácter. Pero si intenta usarlo con echo Line1%NLM%Line2
, falla, ya que el analizador detiene el análisis en un solo <LF>
.
Pero esto funciona
echo Line1^
Line2
Así que hay que añadir un salto de línea escaparon en la línea y que es la NL-variable. La variable NL consta de solo tres caracteres.
NL=^<LF><LF>
Y si esto se expande, solo crea un <LF>
escapado como el primer <LF>
después de que se haya ignorado el símbolo de intercalación.
Btw. En mi opinión, es mucho más fácil usar avances de línea con expansión retardada, ya que no hay necesidad de escapar de nada.
En este ejemplo, utilizo %=EMPTY=%
en lugar de una línea vacía (para autocomentar), pero como la variable =EMPTY=
no puede existir, se ampliará a una línea vacía.
setlocal EnableDelayedExpansion
(set NLM=^
%=EMPTY=%
)
echo Line1!NLM!Line2
EDIT: Anexar algunos consejos para útil usando el <LF>
1) utilizarlo como nueva línea en un echo
setlocal EnableDelayedExpansion
(set LF=^
%=EMPTY=%
)
echo Line1!LF!Line2
2) Se usa para dividir los comandos en un bloque paréntesis
setlocal EnableDelayedExpansion
(set LF=^
%=EMPTY=%
)
(
echo Line1%LF%set x=4%LF%echo !x!%LF%
)
3) Crear un (casi) vacu-EOL-chararcter en un bucle FOR/F, como <LF>
es el delimitador de línea una EOL de <LF>
es la misma que una vacía.
FOR /F ^"eol^=^
delims^=^" %%a in (myFile.php) do echo %%a
4) Uso LF para la División del texto en un for/F bucle
setlocal EnableDelayedExpansion
(set LF=^
%=EMPTY=%
)
set "var=Content1;Content2"
FOR /F "delims=" %%a in ("%var:;=!LF!%") do (
echo %%a
)
¿Hay alguna razón para hacer esto que no sea para crear una nueva línea en blanco? – Mechaflash
Hay muchas, agregué algunas explicaciones a mi respuesta – jeb