Ich sehe drei mögliche Problemumgehungen.
1) Erstellen der Linie, die mehrere For-Parameter kombiniert.
@echo off
SETLOCAL EnableDelayedExpansion
set "line="
for %%a in ("line1"
"line2"
"line3"
"line4"
) do set line=!line!%%~a
echo !line!
2)
@echo on
SETLOCAL EnableDelayedExpansion
set "line=line1 & x#"^
"line2 & a#"^
"line3 & b #"^
"line4 & c "
set "line=!line:#" "=!"
echo !line!
Der erste Raum der „quote“ am Ende jeder Zeile verlassen in jeder Zeile ist wichtig, weil die caret als mehrzeilige Charakter funktioniert, aber es entgeht auch das erste Zeichen, also auch ein Zitat, wäre geflüchtet.
Also ersetze ich die unesshafte # "" nach dem Aufbau der Linie.
EDIT Hinzugefügt: 3) Disappearing zitiert
setlocal EnableDelayedExpansion
echo "A very long line I want to !"=!^
split into two lines"
diese Meiner Meinung nach ist die beste Art und Weise, es funktioniert wie der Parser zuerst die Anführungszeichen sehen und damit die letzte caret funktionieren wird, wie es scheint außerhalb der Zitate zu sein.
Aber dieser Ausdruck !"=!
erweitert die Variable mit dem Namen "=
, aber solch ein Variablenname kann nicht existieren (ein Gleichheitszeichen kann nur als erstes Zeichen auftreten), so dass es zu nichts erweitert.
Sie können auch sichere Ausdrücke erstellen, sie werden immer aus Anführungszeichen entkommen, unabhängig, ob es ein Zitat oder nicht in der Zeile gibt.
!"^"=!
echo This multiline works !"^"=!^
as expected
echo "This multiline works !"^"=!^
too"
Wenn Sie verzögerte Expansion wollen vermeiden, können Sie auch eine -FÜR-Schleife verwenden, wie
for %%^" in ("") do (
echo "This multiline works %%~"^
too"
)
Die Antwort ist nicht einfach, aber das sind ein paar coole Tricks! Ich wünschte, ich könnte mehrere Upvotes haben. Vielen Dank! –
Ich mag wirklich Methode # 1. Gibt es irgendwelche Fragen zu dieser Methode? – djangofan
Es schlägt mit Zeichen wie '*?' Fehl und versucht als For-Schleife, sie als Platzhalter zu verwenden. Aber dann können Sie zu einer FOR/F-Schleife wechseln – jeb