Por que essa multilinha para / em / do não funciona em um lote?

1

Para ajudar meu filho a aprender as cores mais comuns, fiz esse 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 loop for executa cada comando ffplay , 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 eu pressiono q para sair dessa instância de ffplay e a próxima cor é exibida.

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

Mas isso simplesmente não funciona. Se eu sair direito dessas duas perguntas ...

... já que cada ^<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, desnecessário dizer, funciona perfeitamente.

O que funciona é começar a última linha com um espaço . Mas, apesar de encontrar uma maneira de fazer o lote funcionar, a questão permanece. Por que é necessário esse espaço ? Ou, o que estou perdendo nas respostas às perguntas listadas?

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

Editar:
Para referência, o lote de trabalho final (obrigado a todos), com cores ordenadas alfabeticamente e sem carets 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
    
por cdlvcdlv 09.06.2018 / 18:37

1 resposta

1

Você pode omitir todos os caracteres de continuação de linha ^ que não são necessários,
mas como as linhas seguintes começam na primeira coluna, isso é interpretado como escapar do primeiro caractere da linha seguinte - não o que você disse, 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
    
por 09.06.2018 / 23:42