¿Por qué esta multilínea for/in/do no funciona en un lote?

¿Por qué esta multilínea for/in/do no funciona en un lote?

Para ayudar a mi hijo a aprender los colores más comunes, hice este lote (es para Windows 7 pero supongo que es igual en otra versión de 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 sencillo: el forbucle ejecuta cada ffplaycomando uno a la vez, llenando mi pantalla 16:9 con un solo color hasta que el niño reconoce el color y lo nombra bien; luego presiono qpara salir de esa instancia ffplayy se muestra el siguiente color.

Rompo el comando para poder tener cada valor de color en una línea y mezclar fácilmente las líneas cuando lo necesito para evitar aprender un orden específico.

Pero simplemente no funciona. Si acierto en estas dos preguntas...

... dado que cada ^<new line>desaparece del comando final, mi lote es equivalente a la línea única del intérprete de línea 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

... que, ni que decir tiene, funciona perfectamente.

Lo que sí funciona es comenzar la última línea conun espacio. Pero, a pesar de encontrar una manera de hacer que el lote funcione, la pregunta persiste. ¿Por qué es necesario?ese espacio? ¿O qué me falta en las respuestas a las preguntas enumeradas?

Editar:
#82461F==marrón
#7E287E==violeta
Mi esposa no estaba convencida de cómo se veían estos dos colores con nombre en nuestra pantalla.

Editar:
Como referencia, el lote de trabajo final (gracias a todos), con colores ordenados alfabéticamente y sin signos de intercalación ni espacios innecesarios:

@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

Respuesta1

Puede omitir todos los caracteres de continuación de línea, ^ya que no son necesarios,
pero como las líneas siguientes comienzan en la primera columna, esto se interpreta como un escape del primer carácter de la siguiente línea; supongo que no es lo que esperaba.

Eso no hace daño a las letras, pero escapar del paréntesis de cierre es algo diferente.
El siguiente lote repite únicamente el comando con fines de prueba:

@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

Salida de muestra:

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

información relacionada