Pregunta ¿Cómo se puede hacer eco de una nueva línea en los archivos por lotes?


¿Cómo puede insertar una nueva línea desde su salida de archivo por lotes?

Quiero hacer algo como:

> echo hello\nworld

Cuál sería la salida:

Hola
  mundo


522
2017-09-25 11:50


origen


Respuestas:


echo hello & echo.world

Esto significa que podrías definir & echo. como una constante para una nueva línea \n.


392
2017-09-25 11:52



Utilizar:

echo hello
echo.
echo world

458
2017-09-25 11:51



Aquí tienes, crea un archivo .bat con lo siguiente en él:

@echo off
REM Creating a Newline variable (the two blank lines are required!)
set NLM=^


set NL=^^^%NLM%%NLM%^%NLM%%NLM%
REM Example Usage:
echo There should be a newline%NL%inserted here.

echo.
pause

Debería ver resultados como los siguientes:

There should be a newline
inserted here.

Press any key to continue . . .

Solo necesita el código entre las declaraciones REM, obviamente.


114
2017-11-06 18:43



Hay una característica estándar echo: en cmd / bat-files para escribir línea en blanco, que emula una nueva línea en su salida de cmd:

@echo off
@echo line1
@echo:
@echo line2

Salida del archivo cmd citado anteriormente:

line1

line2

89
2018-06-26 08:11



Como la respuesta de Ken, pero con el uso de la expansión demorada.

setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)

echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"

Primero, se crea un único carácter de salto de línea y se asigna a la variable \ n.
Esto funciona cuando el símbolo de intercalación en el extremo de línea intenta escapar del siguiente carácter, pero si se trata de un salto de línea, se ignora y el siguiente carácter se lee y se escapa (incluso si esto también es un salto de línea).
Luego necesita un tercer salto de línea para finalizar la instrucción actual, de lo contrario la tercera línea se agregará a la variable LF.
Incluso los archivos por lotes tienen terminaciones de línea con CR / LF, solo los LF son importantes, ya que los CR se eliminan en esta fase del analizador.

La ventaja de usar la expansión retrasada es que no existe ningún tipo de manejo especial de caracteres.
echo Line1%LF%Line2 fallaría, ya que el analizador deja de analizar las alimentaciones de línea individuales.

Más explicaciones están en
SO: los comandos largos se dividen en varias líneas en el archivo de lote de Vista / DOS (.bat)
SO: ¿Cómo funciona el intérprete de comandos de Windows (CMD.EXE) para analizar scripts?

Editar: evitar echo. 

Esto no responde a la pregunta, ya que la pregunta era sobre solo echo que puede dar salida a varias líneas.

Pero a pesar de las otras respuestas que sugieren el uso de echo. para crear una nueva línea, debe tenerse en cuenta que echo. es el peor, ya que es muy lento y puede fallar por completo, ya que cmd.exe busca un archivo llamado ECHO e intenta comenzarlo.

Para imprimir solo una línea vacía, puede usar una de

echo,
echo;
echo(
echo/
echo+
echo=

Pero el uso de echo., echo\ o echo: debe evitarse, ya que pueden ser realmente lentos, dependiendo de la ubicación donde se ejecutará el script, como una unidad de red.


51
2018-06-16 23:52



echo. Basta de charla.

Si lo necesita en una sola línea, use la &. Por ejemplo,

echo Line 1 & echo. & echo line 3

saldría como:

Line 1

line 3

Ahora, digamos que quieres algo un poco más elegante, ...

set n=^&echo.
echo hello %n% world

Salidas

hello
world

Entonces solo arroje un %n% cada vez que quiera una nueva línea en una declaración de eco. Esto es más cerca de tu \n utilizado en varios idiomas

Descompostura

set n= establece la variable n igual a:

^ Anula el siguiente símbolo a seguir:

& Significa hacer otro comando en la misma línea. No nos importa el errorlevel (es una declaración de eco para gritar en voz alta), por lo que no && es necesario.

echo. Continúa la declaración de eco.

Todo esto funciona porque puedes crear variables que son código y usarlas dentro de otros comandos. Es una especie de función de ghetto, ya que el lote no es exactamente el más avanzado de los lenguajes de scripting de shell. Esto solo funciona porque el uso de las variables por lotes es muy pobre, por lo que no designa entre ints, chars, floats, strings, etc.

Si eres hábil, podrías hacer que esto funcione con otras cosas. Por ejemplo, usarlo para hacer eco de una pestaña

set t=^&echo.     ::there are spaces up to the double colon

33
2017-07-16 23:50



Al hacer eco de algo para redirigir a un archivo, los múltiples comandos de eco no funcionarán. Creo que tal vez el redirector ">>" sea una buena opción:

echo hola> temp
eco mundo >> temperatura

19
2017-08-09 01:00



Al igual que sugiere Grimtron, aquí hay un ejemplo rápido para definirlo:

@echo off
set newline=^& echo.
echo hello %newline%world

Salida

C:\>test.bat
hello
world

15
2018-03-05 16:47



Si necesita poner resultados en un archivo, puede usar

(echo a & echo. & echo b) > file_containing_multiple_lines.txt

13
2017-09-02 00:09