¿Cómo puedo insertar una nueva línea en un comando cmd.exe?

23

Estoy tratando de ejecutar un comando cmd.exe, con un salto de línea o una nueva línea como parte del comando, como a continuación:

command -option:text  
whatever

Pero cada nueva línea ejecuta el comando, en lugar de continuar el comando en la siguiente línea.

Entonces, ¿cómo puedo ingresar un nuevo carácter de línea o crear un comando de varias líneas en cmd.exe?

rudimenter
fuente

Respuestas:

19

Usa el ^personaje como un escape:

command -option:text^

whatever

Supongo que está utilizando cmd.exe de Windows XP o similar. Esto no es DOS real. Si está utilizando DOS real (MS-DOS, Win3.1, Win95, Win98, WinME), entonces no creo que haya un escape para las nuevas líneas. Tendría que ejecutar un shell personalizado. cmd.exe le pedirá "¿Más?" cada vez que presione enter con un ^al final de la línea, simplemente presione enter nuevamente para escapar / incrustar una nueva línea.

Darth Android
fuente
Demasiado genial, no lo sabía.
TJ Crowder
1
Esto lo que sugiere es que me permite ingresar más texto en una nueva línea. No conserva la nueva línea. Lo que quiero es que entre "texto" y "lo que sea" sea una nueva línea. Algo como esto: "text \ nwhatever"
rudimenter
Creo que tienes que usar dos líneas nuevas para hacer eso, lo malo es no darme cuenta de esto en mi publicación original (ahora editada)
Darth Android
1
Cabe señalar que si tiene espacios en el texto, deberá ajustarlos entre comillas. Además, asegúrese de incluir la cita final, de lo contrario, el cursor se ignorará como un carácter de escape y se tratará como texto. Finalmente, deberá poner comillas alrededor del texto en cada línea que contenga espacios (hágalo incluso si no contiene espacios para estar seguro), y poner un cursor después de la cita de cierre para cada línea que continúa.
Synetech
1
Terminé aquí tratando de encontrar una manera de poner nuevas líneas en los comentarios de un SHUTDOWN.EXEcomando. Terminé usando algo como esto: shutdown -s -t 900 -c "foo bar"^ > ¿Más? "baz"^ > Más? "test that."Funcionó.
Synetech
4

Use códigos Alt con el teclado numérico

C:\>ver

Microsoft Windows [Version 6.3.9600]

C:\>echo Line1◙Line2 >con
Line1
Line2

C:\>

El carácter de avance de línea se puede ingresar como un código Alt en la CLI usando el teclado numérico: con NumLock activado, mantenga presionada la tecla ALT y escriba 10 en el teclado numérico antes de liberar ALT. Si también necesita el CR, escríbalos con Alt + 13 y luego Alt + 10:♪◙

Nota: esto no funcionará en un archivo por lotes.

Caso de uso de muestra:

Está intentando leer las variables de entorno% PATH% o% CLASSPATH% para obtener una visión general rápida de lo que hay y en qué orden, pero el muro de texto que se pathdevuelve es ilegible. Entonces esto es algo que puede escribir rápidamente:

echo %path:;=◙% >con

Editar:

Se agregó la >consolución alternativa que Brent Rittenhouse descubrió para las versiones más recientes de cmd.exe, donde el método original había dejado de funcionar.

Amit Naidu
fuente
Esto no parece funcionar para mí. Termino con e2 99 aa e2 97 99pasado. ¿Algún tipo de punto de código Unicode? Sin embargo, veo que los personajes entran en la línea de comando. ¿Alguna sugerencia?
Brad
@Brad Puedo confirmar que ya no parece funcionar en el nuevo cmd.exe en Windows 10 e incluso mi antiguo cuadro de Windows 7 ya no se comportará de esta manera.
Amit Naidu
¡Extraño! Me pregunto si puedo desenterrar un viejo cmd.exe de algo ...
Brad
@Brad, acabo de probar y algunas cosas y me di cuenta de que puedes obtener ese comportamiento anterior si cambias a las fuentes de trama en las propiedades de la consola, en lugar de las fuentes Lucida y True Type y marca la Use legacy consolecasilla de verificación. Pero se ve muy mal en un monitor de alta resolución.
Amit Naidu
1
En realidad, creo que he encontrado una solución que funciona para esto completamente en CUALQUIER fuente. Si simplemente repite la línea con caracteres alt-10 y luego lo redirige a CON, ¡funcionará! Por ejemplo: (echo New-line detected rigghhhtt ◙^<--- HERE!) > CONlos paréntesis circundantes son opcionales. Aquí hay un ejemplo más sólido de lo que puede hacer con esto (¡Y retornos de carro que ahora funcionan, y de forma completamente independiente!): I.imgur.com/qqN37PH.png
Brent Rittenhouse
1

No sé si esto funcionará para usted, pero poniendo & echo (el siguiente espacio es importante). entre cada declaración que desea en una nueva línea. Solo intenté esto con un simple archivo bat de

echo %1

Luego lo guardé como testNewLines.bat

Entonces la línea cmd

testNewLines first line&echo Second Line&echo Third line

Resultó que se hizo eco de lo siguiente

primera línea
segunda línea
Tercera línea

Haydar
fuente
1

Ampliando la respuesta de Amit ( /superuser//a/1132659/955256 ) Encontré una manera de hacerlo en cualquier fuente SIN usar la consola heredada.

¡Todo lo que necesita hacer es simplemente repetir la línea con caracteres alt-10 y luego redirigirla cony funcionará!

Por ejemplo, dado:

(echo New-line detect rigghhhtt ◙ ^ <--- AQUÍ!)> CON

editar: Dato curioso, parece que puedes poner la redirección al principio de esta manera:

> CON echo New-line detectó rigghhhtt ◙ ^ <--- ¡AQUÍ!

Extraño, ¿eh?

Obtendrá una salida de:


New-line detected rigghhhtt  
<-- HERE!

(Los paréntesis circundantes son opcionales).

¡Aquí hay un ejemplo más sólido de lo que puede hacer con este AND retornos de carro que ahora funciona, y de forma completamente independiente !:

Lo mejor de todo, ¡esto funciona si también redirige a un archivo!
(simplemente cambie > CONa> desired_output_file.txt

¡Disfrutar!

Brent Rittenhouse
fuente
1

La salida de ^ se puede guardar

set br= ^
<</br (newline)>>
<</br>>

ejemplo:

@echo off
setlocal enableExtensions enableDelayedExpansion
rem cd /D "%~dp0"


rem //# need 2 [/br], can't be saved to a var. by using %..%;
set br= ^



set "t=t1!br!t2!br!t3"

for /f "tokens=* delims=" %%q in ("!t!") do (
    echo %%q
)


:scIn
rem endlocal
pause
rem exit /b

; salida:

t1
t2
t3
Press any key to continue . . .
ilias
fuente
0

Creo que no puedes hacer eso desde el cmd.exeshell de Windows . ( Es no DOS. )


No necesita un "shell personalizado" completo para eso. Solo necesitará escribir algo como esto (ejemplo en Python ):

import subprocess
subprocess.call(["C:\\bin\\sometool.exe", "test\nwith\nnewlines"])

O rubí:

Kernel::exec "C:\\bin\\sometool.exe", "test\nwith\nnewlines"

Mira, no es tan difícil.

usuario1686
fuente