2009-11-12 19 views
12

¿Es posible poner un nuevo carácter de línea en una línea de eco en un archivo por lotes?¿Es posible poner un nuevo carácter de línea en una línea de eco en un archivo por lotes?

Básicamente quiero ser capaz de hacer el equivalente de:

echo Hello\nWorld 

Usted puede hacer esto con bastante facilidad en Linux, pero no puedo encontrar la manera de hacerlo en Windows.

+2

http://stackoverflow.com/questions/132799/how-can-you-echo-a-newline -en-archivos por lotes, creo que lo responde. – Andrew

+0

Ahaha, sí, casi la misma respuesta que encontré – Benj

Respuesta

33

echo. imprime una línea en blanco.

Ejemplo:

echo Hello 
echo. 
echo world 

impresiones

Hello 

world 
+5

' echo' es ~ 20 veces más lento que ' echo ('y falla completamente cuando existe un archivo con el nombre' echo' sin extensión. Entonces 'echo (' es más seguro y más rápido – jeb

+4

'echo (' no funciona en DOS 6.22.) (Aunque probablemente sea una audiencia mínima en este punto.) –

+0

@JimDavis +1 para la compatibilidad de DOS 6.22 –

-1

Creo que no es posible. Solo puede probar con un ascii-character en este: http://www.asciitable.com/ Pero esto quizás bloquee su archivo por lotes.

+0

Sí, tuve un intento en esto, no funcionó tristemente. – Benj

5

Ajaja,

Creo que he trabajado algo lo suficientemente cerca ...

echo hello&echo.&echo world 

Produce:

hola

mundo

13

Después de un poco de experimentación Descubrí que es posible hacerlo sin emitir dos EC por separado ho comandos como se describe en How can you echo a newline in batch files?. Sin embargo, para que funcione, necesitará un editor de texto que no traduzca CR a CR + LF.

Tipo:

@echo First Line 

luego con bloqueo numérico, mantenga pulsada la tecla ALT y escriba 10 en el teclado numérico antes de soltar ALT (que debe utilizar el teclado numérico, no las teclas numéricas de la fila superior) Esto insertará un carácter CR. Luego escribe la segunda línea. Dependiendo de su editor y cómo se maneja LC en comparación con CR + LF puede obtener:

@echo First Line◙Second Line 

o

@echo First Line 
Second Line 

Esto funciona desde la línea de comandos y funcionará en un archivo por lotes, siempre que el el editor de texto no convierte CR a CR + LF (lo que los editores de Windows/DOS hacen a menos que los configure no). Si el CR se convierte a CR + LF, o si usa solo LF, la segunda línea se interpreta como un nuevo comando.

Sin embargo, no veo por qué esto sería preferible a simplemente:

@echo First Line 
@echo Second Line 
+0

Gracioso, pensé que había intentado esto, pero lo he intentado de nuevo y realmente funciona. – Benj

+0

No sé qué sistema operativo ha intentado, pero su solución no puede funcionar, ya que un _raw_ CR es eliminado por completo por el analizador de lotes. En el mejor de los casos, CR movería el cursor de nuevo a la línea comienza, no a la siguiente línea – jeb

+0

@jeb: Eso dependería totalmente de cómo el shell de comandos maneja el CR. Lo probé en Windows cmd.exe (ya que así es como se etiqueta la pregunta), y como comentó Benj, le funcionó. cmd.exe presumiblemente realiza la traducción a CR + LF.La mayoría de los emuladores de terminal admiten una traducción similar por configuración, pero tiene razón en que la técnica no es aplicable en general, pero no fue así como se presentó la pregunta. Sigo confundido con respecto a por qué alguien querría hacer esto, ¡pero ahí está! – Clifford

0

Me pareció muy informativo, por lo que quería publicar un mejor ejemplo usando las respuestas proporcionadas

Esto proporciona un mensaje de uso con un formato agradable

if "%1" == """" goto usage 

:usage 
echo USAGE: %0 [Set properties using -D flag] [Ant Task to Run] & 
echo.                & 
echo  Availble Command line properties      & 
echo  --------------------------------      & 
... 
17

Se puede resolver con un solo eco.

Necesita un carácter de nueva línea \n para esto. Hay varias maneras de obtener una nueva línea en el echo

1) En este ejemplo se utiliza el símbolo de intercalación de varias líneas para añadir una nueva línea en el comando, se requiere
la línea vacía

echo Hello^ 

world 

2) La La siguiente solución crea primero una variable que contiene un único carácter de avance de línea.

set \n=^ 


rem ** Two empty lines are required 

O crear la nueva línea con una versión ligeramente modificada

(set \n=^ 
%=DONT REMOVE THIS=% 
) 

Y el uso de este personaje con expansión retardada

setlocal EnableDelayedExpansion 
echo Hello!\n!world 

Para utilizar un carácter de avance de línea con el ciento expansión necesita crear una secuencia más compleja

echo Hello^%\n%%\n%world 

O puede utilizar el New line hack

REM Creating a Newline variable (the two blank lines are required!) 
set \n=^ 


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

Pero sólo la expansión retardada de la nueva línea funciona fiable, también en el interior de las cotizaciones.

+0

+1 Por traer esta questi en la parte posterior de la tumba ;-) – Benj

+0

+1, ideal para tener la posibilidad de usar alimentación de línea en una variable con expansión inmediata (por ciento); sin embargo, ¿hay alguna forma de expandir un carácter de retorno de carro de la misma manera sin demora en la expansión? – aschipfl

+0

@aschipfl No, no es posible, ya que todos los retornos de carro se eliminan justo después de la fase de expansión porcentual y no hay forma de escapar de ellos – jeb

2

echo. o eco (

va a hacer la nueva línea en blanco. Espero que esto es útil.

+1

Pero esto no responde a la pregunta de cómo agregar una nueva línea entre dos textos. – jeb

Cuestiones relacionadas