Windows: ¿Cómo especificar el comando multilínea en el símbolo del sistema?

170

¿Cómo extendemos un comando a la siguiente línea?

básicamente cuál es la alternativa de Windows para Linux

ls -l \
/usr/

aquí usamos la barra invertida para extender el comando en la siguiente línea

¿Cuál es el equivalente para Windows?

Jigar
fuente
+1 para preguntas y respuestas breves y concisas, una exploración más extensa del manejo de caret en stackoverflow.com/questions/69068/…
matt wilkie

Respuestas:

297

Después de probar casi todas las teclas de mi teclado:

C:\Users\Tim>cd ^
Mehr? Desktop

C:\Users\Tim\Desktop>

Entonces parece ser la tecla ^.

Timbo
fuente
13
Microsoft no puede cumplir con sus propios estándares, por lo que esto no funciona en PowerShell. El equivalente de PowerShell a ^ es `So C: \ Users \ Tim> cd` >> Desktop lo
lleva
3
@RicJafe ¿Por qué debería? ¡PowerShell está completamente separado! La clave equivalente para PS es `.
WhatIsHeDoing
¿Alguna idea de lo que es en PowerShell?
Ryan
3
@RyanSeanWattrus Usando el mismo método muy científico: `(l'accent grave)
Timbo
57

En el símbolo del sistema de Windows, ^se usa para escapar del siguiente carácter en la línea de comando. (Like \se usa en cadenas). Los caracteres que deben usarse en la línea de comando tal como están deben tener un ^ prefijado, por eso funciona para la nueva línea.

Como referencia, los caracteres que necesitan escapar (si se especifican como argumentos de comando y no entre comillas) son: &|()

Entonces, el equivalente de su ejemplo de Linux sería (¿el más? Es un aviso):

C:\> dir ^
More? C:\Windows
Daemin
fuente
15
El carácter '^' debe ser el último carácter de la línea. De lo contrario, si tiene ESPACIO al final, el comando multilínea no funciona.
Dmytro Ovdiienko
6

El carácter de intercalación funciona, sin embargo, la siguiente línea no debe comenzar con comillas dobles. Por ejemplo, esto no funcionará:

C:\ ^
"SampleText" ..

Comience la siguiente línea sin comillas dobles (no es un ejemplo válido, solo para ilustrar)

Ali
fuente
1

Si vino aquí en busca de una respuesta a esta pregunta, pero no exactamente de la manera en que se refería el OP, es decir, ¿cómo consigue que funcione la CMD multilínea en una sola línea? Tengo una especie de respuesta peligrosa para usted.

Intentar usar esto con cosas que realmente usan tuberías, como por ejemplo, findstres bastante problemático. Lo mismo vale para tratar con el elses. Pero si solo desea que un comando condicional de varias líneas se ejecute directamente desde CMD y no a través de un archivo por lotes, esto debería funcionar bien.

Digamos que tiene algo como esto en un lote que desea ejecutar directamente en el símbolo del sistema:

@echo off
for /r %%T IN (*.*) DO (
    if /i "%%~xT"==".sln" (
        echo "%%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file
        echo Dumping SLN file contents
        type "%%~T"
    )
)

Ahora, podría usar el quilate de continuación de línea ( ^) y escribirlo manualmente de esta manera, pero advirtiendo, es tedioso y si comete un error puede aprender la alegría de volver a escribir todo.

Bueno, no puede funcionar con sólo ^gracias a escapar de los mecanismos dentro de paréntesis, encogimiento de hombros , al menos no como escrita. En realidad, debería duplicar los quilates de esta manera:

@echo off ^
More? for /r %T IN (*.sln) DO (^^
More? if /i "%~xT"==".sln" (^^
More? echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file^^
More? echo Dumping SLN file contents^^
More? type "%~T"))

En cambio, puede ser un scripter astuto sucio del lado equivocado de las pistas que no necesita quilates intercambiándolos por un solo tubo ( |) por continuación de un bucle / expresión:

@echo off
for /r %T IN (*.sln) DO if /i "%~xT"==".sln" echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file | echo Dumping SLN file contents | type "%~T"
kayleeFrye_onDeck
fuente