为什么这个多行 for/in/do 在批处理中不起作用?

为什么这个多行 for/in/do 在批处理中不起作用?

为了帮助我的孩子学习最常见的颜色,我制作了这批(这是 Windows 7,但我想在另一个 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

非常简单:循环一次for运行一个命令,用单一颜色填充我的 16:9 屏幕,直到孩子识别出该颜色并能很好地命名;然后我按下退出该实例并显示下一个颜色。ffplayqffplay

我打破了命令,这样我就可以让每一种颜色值都在一行中,以便在需要的时候轻松混合这些行,从而避免学习特定的顺序。

但它就是不起作用。如果我从这两个问题中得到正确答案...

...由于每个命令都^<new line>从最后的命令中消失,我的批处理相当于命令行解释器的单行......

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

... 不用说,它运行完美。

它的工作方式是最后一行以空间。但是,尽管找到了让批处理工作的方法,问题仍然存在。为什么需要那个空间? 或者,我对所列问题的答案遗漏了什么?

编辑:
#82461F==棕色
#7E287E==紫色
我的妻子不太相信这两种颜色在我们的显示器上看起来如何。

编辑:
作为参考,最终的工作批次(感谢所有人),颜色按字母顺序排列,并且没有不必要的插入符号和空格:

@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

答案1

您可以省略所有行连续字符,^它们不是必需的,
但由于下面的行从第一列开始,因此这被解释为转义下一行的第一个字符 - 我猜这不是您想要的。

这对字母来说没什么坏处,但转义右括号则是另一回事。
以下批处理仅回显命令以用于测试目的:

@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

示例输出:

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

相关内容