Vedo tre possibili soluzioni.
1) Costruire la linea combinando più parametri per.
@echo off
SETLOCAL EnableDelayedExpansion
set "line="
for %%a in ("line1"
"line2"
"line3"
"line4"
) do set line=!line!%%~a
echo !line!
2) Lasciando il "preventivo" alla fine di ogni riga
@echo on
SETLOCAL EnableDelayedExpansion
set "line=line1 & x#"^
"line2 & a#"^
"line3 & b #"^
"line4 & c "
set "line=!line:#" "=!"
echo !line!
Il primo spazio in ciascuna riga è importante, perché il cursore funziona carattere multilinea ma sfugge anche il primo personaggio, quindi anche una citazione sarebbe sfuggita.
Quindi sostituisco il # "non necessario dopo aver costruito la linea.
EDIT Aggiunto: 3) scomparsa cita
setlocal EnableDelayedExpansion
echo "A very long line I want to !"=!^
split into two lines"
A mio parere questo è il modo migliore , funziona come il parser prima vedere le virgolette e quindi l'ultima cursore funziona, in quanto sembra essere al di fuori delle virgolette.
Ma questa espressione !"=!
espande la variabile denominata "=
, ma tale nome di variabile non può esistere (un segno di uguale può verificarsi solo come primo carattere) quindi non si espande.
È anche possibile creare sicure espressioni, esse scappano sempre dalle virgolette, indipendentemente se c'è una citazione o meno nella riga.
!"^"=!
echo This multiline works !"^"=!^
as expected
echo "This multiline works !"^"=!^
too"
Se si vuole evitare l'espansione ritardata, si potrebbe anche usare un for-loop come
for %%^" in ("") do (
echo "This multiline works %%~"^
too"
)
La risposta non è semplice, ma questi sono alcuni trucchi interessanti! Vorrei poter avere più upvotes. Grazie! –
Mi piace molto il metodo # 1. Ci sono dei segreti su questo metodo? – djangofan
Fallisce con caratteri come '*?' E, poiché il ciclo for tenta di usarli come caratteri jolly. Ma poi puoi passare a un ciclo FOR/F – jeb