1008 Stimmen

Teile lange Befehle in mehrere Zeilen durch eine Windows-Batchdatei.

Wie kann ich lange Befehle in einer Batchdatei über mehrere Zeilen aufteilen?

11voto

Simon H Punkte 351

Etwas, das ich nicht gefunden habe, als ich nach 'wie man eine lange DOS-Batch-Dateizeile aufteilt' gesucht habe, war, wie man etwas aufteilt, das lange zitierten Text enthält. Tatsächlich wird es in den obigen Antworten behandelt, ist aber nicht offensichtlich. Verwenden Sie Caret, um sie zu maskieren. z.B.

myprog "needs this to be quoted"

kann geschrieben werden als:

myprog ^"needs this ^
to be quoted^"

aber Vorsicht beim Starten einer Zeile mit Caret, nachdem Sie eine Zeile mit Caret beendet haben - weil es als Caret herauskommen wird..?:

echo ^"^
needs this ^
to be quoted^
^"

-> "needs this to be quoted^"

0 Stimmen

Sie müssen das letzte Anführungszeichen nicht escapen. Ein Dach (oder ein anderes Sonderzeichen) in der ersten Spalte in einer neuen Zeile wird durch ein mehrzeiliges Dach escapen

0 Stimmen

Guter Punkt! :) ... Ich benutze dies, um sehr lange ffmpeg '-vf' Argumente zu splitten, und es funktioniert einwandfrei.

0 Stimmen

Was passiert, wenn die mehrzeilige Abfrage zitiert werden muss, z. B. ^"^ ....Get-Volume | Flush-Volume?

8voto

npocmaka Punkte 52753

Auch wenn das Dach der bevorzugte Weg ist, um dies zu tun, gibt es hier einen weiteren Ansatz, der Makro verwendet, um einen Befehl mit den übergebenen Argumenten zu konstruieren:

@echo off
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set "{{=setlocal enableDelayedExpansion&for %%a in (" & set "}}="::end::" ) do if "%%~a" neq "::end::" (set command=!command! %%a) else (call !command! & endlocal)"
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

%{{%
    echo
    "Befehl"
    geschrieben
    auf einem
    paar Zeilen
%}}%

Der Befehl ist einfacher zu lesen ohne die Dachzeichen, aber die Verwendung von speziellen Symbolen wie Klammern, Umleitung und so weiter wird ihn brechen. Daher können Sie dies für einfachere Fälle verwenden. Sie können jedoch immer noch Parameter in doppelte Anführungszeichen setzen

5 Stimmen

Dies ist, wie schwarze Magie oder jamaikanisches Voodoo aussieht.

0 Stimmen

In Bezug auf diesen vorherigen Kommentar "guter Punkt! :) ... Ich benutze dies, um SEHR lange ffmpeg '-vf' Argumente aufzuteilen, und es funktioniert wunderbar. – Simon H" Könnten Sie oder jemand bitte ein vollständiges Beispiel posten, wie Sie einen -vf-Filter in mehrere Zeilen aufteilen? Ich habe jede hier gezeigte Beispielkombination in verschiedenen Versionen ausprobiert und ich kann die Lösung nicht finden, die in einem zitierten Video-Filter-Befehl funktionieren wird. Danke. Kommentiert am 22. Jul 2021 um 14:18"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X