Warum funktioniert dieses mehrzeilige for/in/do nicht in einem Batch?

Warum funktioniert dieses mehrzeilige for/in/do nicht in einem Batch?

Um meinem Kind zu helfen, die gängigsten Farben zu lernen, habe ich diese Zusammenstellung erstellt (es ist Windows 7, aber ich nehme an, dass es bei einer anderen Windows-Version dasselbe ist):

@echo off
for %%a in (^
black ^
blue ^
green ^
gray ^
orange ^
pink ^
red ^
#82461F ^
#7E287E ^
white ^
yellow ^
) do ffplay -hide_banner -f lavfi -i color=%%a:160x90:d=3,format=rgb24 -fs

Ziemlich unkompliziert: Die forSchleife führt jeden ffplayBefehl einzeln aus und füllt meinen 16:9-Bildschirm mit einer einzigen Farbe, bis das Kind die Farbe erkennt und sie gut benennt. Dann drücke ich , qum diese Instanz zu beenden, ffplayund die nächste Farbe wird angezeigt.

Ich unterbreche den Befehl, damit ich jeden Farbwert in einer Zeile haben kann, um die Zeilen bei Bedarf einfach zu mischen und so zu vermeiden, dass eine bestimmte Reihenfolge gelernt werden muss.

Aber es funktioniert einfach nicht. Wenn ich diese beiden Fragen richtig beantworte ...

... da „every“ ^<new line>aus dem letzten Befehl verschwindet, entspricht mein Batch der einzelnen Zeile des Befehlszeileninterpreters ...

for %a in (black blue green gray orange pink red saddlebrown violet white yellow ) do ffplay -hide_banner -f lavfi -i color=%a:160x90:d=3,format=rgb24 -fs

... was, unnötig zu erwähnen, perfekt funktioniert.

Was funktioniert, ist, die letzte Zeile mitein Leerzeichen. Aber obwohl man einen Weg gefunden hat, den Batch zum Laufen zu bringen, bleibt die Frage. Warum ist es notwendigdieser Raum? Oder: Was übersehe ich in den Antworten auf die aufgeführten Fragen?

Bearbeiten:
#82461F==braun
#7E287E==violett
Meine Frau war nicht überzeugt, wie diese beiden genannten Farben auf unserem Display aussahen.

Bearbeiten:
Als Referenz die endgültige Arbeitscharge (danke an alle), mit alphabetisch geordneten Farben und ohne unnötige Zirkumflexe und Leerzeichen:

@echo off
for %%a in (
black
blue
#82461F %= brown %
gray
green
orange
pink
red
#7E287E %= violet %
white
yellow
) do ffplay -hide_banner -f lavfi -i color=%%a:160x90:d=3,format=rgb24 -fs

Antwort1

Sie können alle Zeilenfortsetzungszeichen weglassen, ^da sie nicht erforderlich sind.
Da die folgenden Zeilen jedoch in der ersten Spalte beginnen, wird dies so interpretiert, als würde das erste Zeichen der folgenden Zeile maskiert – was Sie vermutlich nicht beabsichtigt haben.

Bei Buchstaben schadet das nicht, aber das Escapen der schließenden Klammern ist etwas anderes.
Der folgende Batch gibt zu Testzwecken nur den Befehl aus:

@echo off
for %%a in (black
blue
green
gray
orange
pink
red
#82461F
#7E287E
white
yellow) do echo ffplay -hide_banner -f lavfi -i color=%%a:160x90:d=3,format=rgb24 -fs

Beispielausgabe:

ffplay -hide_banner -f lavfi -i color=black:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=blue:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=green:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=gray:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=orange:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=pink:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=red:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=#82461F:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=#7E287E:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=white:160x90:d=3,format=rgb24 -fs
ffplay -hide_banner -f lavfi -i color=yellow:160x90:d=3,format=rgb24 -fs

verwandte Informationen