如何在命令提示符下创建一个“for”循环?

Posted

技术标签:

【中文标题】如何在命令提示符下创建一个“for”循环?【英文标题】:How do I make a 'for' loop in the command prompt? 【发布时间】:2013-08-06 21:01:37 【问题描述】:

我正在使用一个执行图像处理的命令行程序,我需要在整个图像文件夹上运行相同的命令。我听说我可以在命令提示符下运行循环,但是我在网上看到了各种不同的示例,无法弄清楚语法。文件夹中的图像标记为“single0.pgm、single1.pgm、single2.pgm、...”一直到 single39.pgm。我需要运行的命令是:

DebayerGPU.exe -demosaic DFPD_R -CPU -pattern GRBG -i single0.pgm -o single0.ppm

我需要为每张照片都这样做。在 C 中,它只是一个简单的 for 循环,例如

for (int j = 0; j<40; j++) 
    DebayerGPU.exe -demosaic DFPD_R -CPU -pattern GRBG -i singlej.pgm -o singlej.ppm

如何在命令提示符下执行此操作?

【问题讨论】:

Iterate all files in a directory using a 'for' loop 的可能副本。 【参考方案1】:

我想通了!对于任何好奇的人,循环是:

for %a in (0 1 2 3 4 5 6 7 8 9 10 11 1
2 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
39) do DebayerGPU.exe -demosaic DFPD_R -CPU -pattern GRBG -i single%a..pgm -o si
ngle%a.ppm

【讨论】:

【参考方案2】:

这里是对 for 循环的简短解释,并附有示例。 http://www.robvanderwoude.com/for.php 记下两个重要的关键点:

    您在命令提示符下编写的代码在放入批处理文件时将不起作用。由于以 %%A 而不是 %A 的形式访问变量,因此在这两种情况下,循环的语法是不同的 特别是针对您的问题,执行 dir *.pgm 比在所有文件上运行 for 循环更容易。因此,您的程序将适用于任何数量的文件,而不仅仅是硬编码 40。这可以按照此处的说明完成:Iterate all files in a directory using a 'for' loop

【讨论】:

【参考方案3】:
for /l %a in (0,1,39) do DebayerGPU.exe -demosaic DFPD_R -CPU -pattern GRBG -i single%a..pgm -o single%a.ppm

不容易出现拼写错误。该命令直接从提示符下愉快地运行,但如果它是批处理文件中的一行,则需要将每个元变量%a 实例的% 加倍(即%a在批处理文件中变为%%a

【讨论】:

以上是关于如何在命令提示符下创建一个“for”循环?的主要内容,如果未能解决你的问题,请参考以下文章

BAT命令行是啥??

For 循环语句

For 循环语句

在命令提示符下使用 echo 创建文本文件

命令提示符:在所有文件上循环和运行命令

Windows批处理-for命令详解