Wie kann ich lange Befehle in einer Batchdatei auf mehrere Zeilen aufteilen?
batch-file
Ondra Žižka
quelle
quelle
^
und nach Ihrem Befehlstext ein Leerzeichen hinzufügen .echo
.co^␍py ^␍file1 ^␍file2
. Ich schlage vor, Sie löschen Ihren Kommentar, um Verwirrung zu vermeiden, zumal diese Quest so beliebt istDie Regel für das Caret lautet:
Ein Caret am Zeilenende fügt die nächste Zeile an, das erste Zeichen der angehängten Zeile wird maskiert.
Sie können das Caret mehrmals verwenden, aber die gesamte Zeile darf die maximale Zeilenlänge von ~ 8192 Zeichen (Windows XP, Windows Vista und Windows 7) nicht überschreiten.
Um das Entkommen des nächsten Zeichens zu unterdrücken, können Sie eine Umleitung verwenden.
Die Umleitung muss kurz vor dem Caret erfolgen. Aber es gibt eine Kuriosität mit Umleitung vor dem Caret.
Wenn Sie einen Token auf das Caret legen, wird der Token entfernt.
Es ist auch möglich, Zeilenvorschübe in den String einzubetten :
Die leere Zeile ist wichtig für den Erfolg. Dies funktioniert nur bei verzögerter Erweiterung, andernfalls wird der Rest der Zeile nach dem Zeilenvorschub ignoriert.
Dies funktioniert, da das Caret am Zeilenende den nächsten Zeilenvorschub ignoriert und dem nächsten Zeichen entgeht, auch wenn das nächste Zeichen ebenfalls ein Zeilenvorschub ist (Wagenrückläufe werden in dieser Phase immer ignoriert).
quelle
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
funktioniert nicht! Ich musste ein Leerzeichen hinzufügen :copy ^[newline] "file1.txt" ^[newline] "file2.txt"
.(Dies ist im Grunde eine Neufassung von Waynes Antwort, aber mit der Verwirrung um das Caret. Ich habe es als CW gepostet. Ich bin nicht schüchtern, Antworten zu bearbeiten, aber es scheint unangemessen , sie komplett neu zu schreiben .)
Sie können mit caret (
^
) lange Zeilen aufbrechen. Denken Sie jedoch daran, dass das Caret und die darauf folgende neue Zeile vollständig aus dem Befehl entfernt werden. Wenn Sie es also dort platzieren, wo ein Leerzeichen erforderlich wäre (z. B. zwischen Parametern), stellen Sie sicher, dass um auch das Leerzeichen einzuschließen (entweder vor^
oder am Anfang der nächsten Zeile - diese letztere Auswahl kann dazu beitragen, klarer zu machen, dass es sich um eine Fortsetzung handelt).Beispiele: (alle unter Windows XP und Windows 7 getestet)
kann geschrieben werden als:
oder
oder auch
(Das letzte funktioniert, weil es keine Leerzeichen zwischen dem
xc
und dem^
und keine Leerzeichen am Anfang der nächsten Zeile gibt. Wenn Sie also das^
und die neue Zeile entfernen , erhalten Sie ...xcopy
)Aus Gründen der Lesbarkeit und Vernunft ist es wahrscheinlich am besten, nur zwischen Parametern zu brechen (achten Sie darauf, das Leerzeichen einzuschließen).
Achten Sie darauf , dass das
^
ist nicht das letzte , was in einer Batch - Datei, wie es scheint , mit , dass ein großes Problem zu sein .quelle
Mehrere Befehle können in Klammern gesetzt und über mehrere Zeilen verteilt werden. so etwas
echo hi && echo hello
kann so ausgedrückt werden:Auch Variablen können helfen:
Auch bei carets (
^
) ist mir aufgefallen, dass dieif
Bedingungen nur dann folgen sollten, wenn ein Leerzeichen vorhanden war:quelle
cmd1.bat && cmd2.bat
unterscheidet sich von der Parens-Form: Ausführen,cmd2.bat
wenncmd1.bat
erfolgreich ausgeführt (ohne Einstellung%errorcode%
). Die letztere Form wird bedingungslos ausgeführt. Etwas unerwartet (zumindest für mich) ist, dass Sie natürlich nicht die Kombination von beiden + verwenden können, dh&&
vor dem Zeilenumbruch hinzufügen .( echo <line break here> hello )
führt zu einer leeren Zeile.Es scheint jedoch, dass das Aufteilen in der Mitte der Werte einer for-Schleife kein Caret erfordert (und der Versuch, eines zu verwenden, wird als Syntaxfehler angesehen). Zum Beispiel,
Beachten Sie, dass nach dem Hallo oder vor dem Abschied kein Platz mehr benötigt wird.
quelle
for
Syntax: Die Trennzeichen der Elemente in der "for-Menge" sind Leerzeichen, Komma, Semikolon, Gleichheitszeichen, TAB-Zeichen und neue Zeilen.do
Teil mehrere / verschachtelteif-else
Anweisungen enthält?