Por que essa multilinha for/in/do não funciona em lote?

Por que essa multilinha for/in/do não funciona em lote?

Para ajudar meu filho a aprender as cores mais comuns, fiz este lote (é o Windows 7, mas suponho que seja o mesmo em outra versão do Windows):

@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

Bastante simples: o forloop executa cada ffplaycomando, um de cada vez, preenchendo minha tela 16:9 com uma única cor até que a criança reconheça a cor e a nomeie bem; então pressiono qpara sair dessa instância ffplaye a próxima cor é exibida.

Eu quebro o comando para poder ter todos os valores de cores em uma linha para misturar facilmente as linhas quando preciso, a fim de evitar que uma ordem específica seja aprendida.

Mas simplesmente não funciona. Se eu acertar essas duas perguntas...

... já que tudo ^<new line>desaparece do comando final, meu lote é equivalente à linha única do interpretador de linha de comando ...

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

... o que, nem é preciso dizer, funciona perfeitamente.

O que funciona é começar a última linha comum espaço. Mas, apesar de encontrar uma forma de fazer o lote funcionar, a questão permanece. Por que é necessárioaquele espaço? Ou o que estou faltando nas respostas às perguntas listadas?

Editar:
#82461F==marrom
#7E287E==violeta
Minha esposa não estava convencida de como essas duas cores nomeadas pareciam em nosso display.

Editar:
Para referência, o lote de trabalho final (obrigado a todos), com cores ordenadas alfabeticamente e sem sinais de intercalação e espaços desnecessários:

@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

Responder1

Você pode omitir todos os caracteres de continuação de linha, ^eles não são necessários,
mas como as linhas seguintes começam na primeira coluna, isso é interpretado como escapando do primeiro caractere da linha seguinte - não o que você indicou, eu acho.

Isso não prejudica as letras, mas escapar dos parênteses de fechamento é uma coisa diferente.
O lote a seguir ecoa apenas o comando para fins de teste:

@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

Exemplo de saída:

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

informação relacionada