batch file - run - ¿Cómo dividir la línea entre comillas dobles en varias líneas en el archivo por lotes de Windows?




how to use batch file (2)

Hoy ideé mi propio método para esto y nunca lo había visto sugerido, así que pensé en publicarlo aquí. Ciertamente, no es elegante en un sentido objetivo. Yo diría que tiene su propio tipo de fealdad y algunas limitaciones, pero me parece mucho más "ergonómico" en comparación con las alternativas.

Específicamente, este método tiene la característica única de no tener que escapar de nada, mientras sigue realizando una sustitución de variable típica. Esto me permite tomar una cadena que se ve exactamente como la quiero, distribuirla entre varias líneas y agregar un prefijo a cada línea sin cambiar nada más en la cadena. Por lo tanto, no se necesita prueba y error para descubrir cómo podrían interactuar los personajes especiales y los personajes de escape. En general, creo que reduce la carga cognitiva necesaria para producir determinísticamente una variable de cadena complicada en múltiples líneas, lo cual es bueno para mí porque no quiero tener que pensar mucho y frustrarme con la complejidad incidental, como los matices del comando de Windows. Interprete. Además, se puede usar una técnica similar en linux bash, haciéndola algo portátil.

Nota: No lo he probado a fondo, puede que no funcione en algunos casos de uso, no lo sé. Sin embargo, el ejemplo tiene un buen número de personajes aparentemente problemáticos y funciona, por lo que parece algo robusto.

set IMAGE_NAME=android-arm64
set CMD=docker run --rm
set CMD=%CMD% --platform=linux
set CMD=%CMD% -v %CD%:/work
set CMD=%CMD% dockcross/%IMAGE_NAME%
set CMD=%CMD% /bin/sh -c
set CMD=%CMD% "mkdir build-%IMAGE_NAME% &&
set CMD=%CMD% cd build-%IMAGE_NAME% &&
set CMD=%CMD% cmake .. &&
set CMD=%CMD% cmake --build ."

echo %CMD%

En mi caso, es un comando, así que puedo ejecutarlo con:

%CMD%

Estaría abierto a cualquier comentario o sugerencia sobre este método. Tal vez incluso se puede mejorar.

Los comandos largos en archivos por lotes de Windows se pueden dividir en varias líneas utilizando ^ como se menciona en Comandos largos divididos en varias líneas en el archivo por lotes de Windows Vista (.bat) .

Sin embargo, si el símbolo de intercalación está dentro de una cadena con comillas dobles, no funcionará. Por ejemplo:

echo "A very long line I want to ^
split into two lines"

Esto imprimirá "A very long line I want to ^ y dime que split es un comando desconocido.

¿Hay alguna forma de evitar esto?


La respuesta más directa es escapar de las comillas. Se imprimirán, pero no citarán funcionalmente los contenidos en lo que respecta a CMD.EXE.

@echo off
echo ^"A very long line I want to ^
split into two lines^"

Todos los caracteres especiales que aparecen en la línea también deben ser escapados ya que ya no se cotizan funcionalmente.

@echo off
echo ^"A very long line I want to ^
split into two lines ^
that also contains special characters ^^ ^& ^| ^> ^< ^"

Como dijo jeb, la continuación de la línea escapa al primer personaje de la línea siguiente. Entonces, si el primer personaje de la siguiente línea resulta ser un personaje especial, no debería escaparse por segunda vez. El siguiente código dará exactamente los mismos resultados que en el ejemplo anterior.

@echo off
echo ^"A very long line I want to ^
split into two lines ^
that also contains special characters ^^ ^
& ^| ^> ^< ^"




batch-file