¿Cómo escribir un comando multilínea?

Resuelto Jigar asked hace 15 años • 7 respuestas

¿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 barras invertidas para extender el comando a las siguientes líneas.

¿Cuál es el equivalente para Windows?

Jigar avatar Mar 03 '09 16:03 Jigar
Aceptado

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 clave ^.

Tenga en cuenta que ^el seguimiento también funciona en archivos por lotes (probado en Windows 7).

Timbo avatar Mar 03 '2009 09:03 Timbo

En el símbolo del sistema de Windows, se ^utiliza 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 ^ prefijo, por eso funciona para la nueva línea.

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

Entonces, el equivalente de su ejemplo de Linux sería (¿ Más? siendo un mensaje):

C:\> dir ^
More? C:\Windows
Dominik Grabiec avatar Mar 03 '2009 10:03 Dominik Grabiec

Solución 1 En CMD, use ^, ejemplo

docker run -dp 3000:3000 ^
  -w /app -v "$(pwd):/app" ^
  --network todo-app ^
  -e MYSQL_HOST=mysql ^
  -e MYSQL_USER=root ^
  -e MYSQL_PASSWORD=secret ^
  -e MYSQL_DB=todos ^
  node:12-alpine ^
  cmd "npm install && yarn run start"

Solución 2 En PowerShell, use ` (comilla invertida), ejemplo

docker run -dp 3000:3000 `
  -w /app -v "$(pwd):/app" `
  --network todo-app `
  -e MYSQL_HOST=mysql `
  -e MYSQL_USER=root `
  -e MYSQL_PASSWORD=secret `
  -e MYSQL_DB=todos `
  node:12-alpine `
  cmd "npm install && npm run start"
Vy Do avatar Jul 15 '2022 01:07 Vy Do

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 avatar Mar 14 '2018 12:03 Ali

Si vino aquí buscando una respuesta a esta pregunta pero no exactamente como quería decir el OP, es decir, cómo hacer que CMD multilínea funcione 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 se aplica al tratar con elseel s. 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.

Supongamos 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ías usar el quilate de continuación de línea ( ^) y escribirlo manualmente de esta manera, pero advertencia, es tedioso y si te equivocas, puedes aprender el placer de escribirlo todo nuevamente.

Bueno, no funcionará solo ^gracias a los mecanismos de escape entre paréntesis . Al menos no como está escrito. En realidad, necesitarías 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, puedes ser un scripter sucio y astuto del lado equivocado de las pistas que no necesitan quilates cambiándolas 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 avatar Feb 15 '2019 00:02 kayleeFrye_onDeck