Veo tres soluciones posibles.
1) Construcción de la línea que combina múltiples parámetros for.
@echo off
SETLOCAL EnableDelayedExpansion
set "line="
for %%a in ("line1"
"line2"
"line3"
"line4"
) do set line=!line!%%~a
echo !line!
2) Al salir de la "cita" al final de cada línea
@echo on
SETLOCAL EnableDelayedExpansion
set "line=line1 & x#"^
"line2 & a#"^
"line3 & b #"^
"line4 & c "
set "line=!line:#" "=!"
echo !line!
El primer espacio de cada línea es importante, porque el símbolo de intercalación trabaja carácter como de varias líneas, pero también se escapa el primer personaje, por lo que también se escapó una cita.
Reemplazo el #ness "#" después de construir la línea.
EDITAR Agregado: 3) desaparición cita
setlocal EnableDelayedExpansion
echo "A very long line I want to !"=!^
split into two lines"
En mi opinión esta es la mejor manera, funciona como el analizador primera ver las cotizaciones y, por tanto, el último símbolo de intercalación funcionará, ya que parece estar fuera de las citas
Pero esta expresión !"=!
expandirá la variable llamada "=
, pero dicho nombre de variable no puede existir (un signo igual solo puede aparecer como primer carácter) por lo que se expande a nada.
También puede crear expresiones seguras, siempre se escaparán de las comillas, independientemente si hay una cita o no en la línea.
!"^"=!
echo This multiline works !"^"=!^
as expected
echo "This multiline works !"^"=!^
too"
Si desea evitar la expansión retardada, también se puede utilizar un -PARA-Loop como
for %%^" in ("") do (
echo "This multiline works %%~"^
too"
)
¡La respuesta no es simple, pero estos son algunos trucos geniales! Ojalá pudiera tener múltiples votos ascendentes. ¡Gracias! –
Realmente me gusta el método # 1. ¿Hay algún problema con ese método? – djangofan
No funciona con caracteres como '*?' Y, como el bucle for, intente utilizarlos como comodines. Pero entonces se puede cambiar a un bucle FOR/F – jeb