windows - vacio - usar comando echo




¿Cómo puedes hacer eco de una nueva línea en archivos por lotes? (12)

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

Quiero hacer algo como:

> echo hello\nworld

Que daría salida:

Hola
mundo


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

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

@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 una salida como la siguiente:

There should be a newline
inserted here.

Press any key to continue . . .

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


Cuando se hace eco de algo para redirigir a un archivo, varios comandos de eco no funcionarán. Creo que tal vez el redirector ">>" es una buena opción:

echo hello > temp
echo world >> temp

Esto funcionó para mí, no es necesaria la expansión retrasada:

@echo off
(
echo ^<html^> 
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause

Escribe salida así:

<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .

La forma más conservadora de caracteres para lograr esto en los sistemas Linux es con el alias -e , que interpreta los caracteres escapados que son barras invertidas.

echo -e "hello\nworld"

Aquí hay otros examples


Las soluciones de Ken y Jeb funcionan bien.

Pero las nuevas líneas se generan solo con un carácter LF y necesito caracteres CRLF (versión de Windows).

Para esto, al final de la secuencia de comandos, he convertido LF a CRLF.

Ejemplo:

TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt

Para comenzar una nueva línea en lote, todo lo que tienes que hacer es agregar "echo [", así:

echo Hi!
echo[
echo Hello!

Puedes usar @echo (@echo + [espacio] + [espacio insegable])

Nota: El espacio insegable se puede obtener con Alt + 0160

Espero eso ayude :)

[edit] Hmm tienes razón, lo necesitaba en un Makefile, funciona perfectamente allí. Supongo que mi respuesta no está adaptada para archivos por lotes ... Mi mal.


Si necesita poner los resultados en un archivo, puede usar

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

Si se necesita usar \ n en los literales de cadena que se pueden pasar a una variable, puede escribir un código como en la siguiente secuencia de comandos Hello.bat :

@echo off
set input=%1
if defined input (
    set answer=Hi!\nWhy did you call me a %input%?
) else (
    set answer=Hi!\nHow are you?\nWe are friends, you know?\nYou can call me by name.
)

setlocal enableDelayedExpansion
set newline=^


rem Two empty lines above are essential
echo %answer:\n=!newline!%

De esta manera, la salida multilínea puede prepararse en un lugar, incluso en otro archivo o archivo externo, e imprimirse en otro.

El salto de línea se mantiene en la variable de nueva línea . Su valor debe sustituirse después de expandir la línea de eco, así que uso setlocal enableDelayedExpansion para habilitar signos de exclamación que expanden las variables en la ejecución. Y la ejecución sustituye a \ n con contenidos de nueva línea (busque la sintaxis en el conjunto de ayuda ). Podríamos, por supuesto, usar ! Nueva línea! mientras se configura la respuesta, pero \ n es más conveniente. Puede pasarse desde el exterior (intente Hello R2 \ nD2 ), donde nadie sabe el nombre de la variable que mantiene la línea (Sí, Hello C3! Newline! P0 funciona de la misma manera).

El ejemplo anterior puede ser refinado a una subrutina o lote independiente, usado como call:mlecho Hi\nI'm your comuter :

:mlecho
setlocal enableDelayedExpansion
set text=%*
set nl=^


echo %text:\n=!nl!%
goto:eof

Tenga en cuenta que la barra diagonal inversa adicional no impedirá que la secuencia de comandos analice la subcadena.


Utilizar:

echo hello
echo.
echo world

echo hello & echo.world

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





command-line