如何在.bat文件中识别%s?

时间:2013-08-30 15:34:33

标签: windows command-line batch-file cmd escaping

我有一个3命令的.bat文件,可以作为3个单独的命令运行(一次输入1个命令行),但是当我将它们作为3行放入bat文件时不起作用。

这是文件:

mogrify -format pgm ephemeral:*.png
pause
CALL forfiles /M *.pgm /C "cmd /c for %s in (@fname) do DebayerGPU.exe -demosaic DFPD_R -CPU -pattern GRBG -i %s.pgm -o %s.ppm
pause
mogrify -format png ephemeral:*.ppm

第一个命令运行正常,但命令行给出了第二个命令的错误: s.pgm此时出人意料

我有fname和%s循环的原因是因为debayer.exe程序不能将@ fname.pgm理解为文件名,但它确实意识到%s意味着引入一个字符串,所以它确实那个,然后forfiles识别@fname并用当前文件名替换它。

关于如何解决这个问题的任何想法?

我试过了:

  1. 使用%%而不是%
  2. 在每个%
  3. 之前放置一个^
  4. 添加上述代码中的CALL
  5. 在每行的末尾添加分号。
  6. 谢谢!

2 个答案:

答案 0 :(得分:2)

首先删除CALL它在这里没用,它将再次启动解析,因此它将删除百分号。

百分号增加一倍,因为它们会减半。

forfiles /M *.pgm /C "cmd /c for %%s in (@fname) do DebayerGPU.exe -demosaic DFPD_R -CPU -pattern GRBG -i %%s.pgm -o %%s.ppm

答案 1 :(得分:1)

您也不需要forfiles。一个直接的循环将起作用。

mogrify -format pgm ephemeral:*.png
pause
for %%s in (*.pgm) do DebayerGPU.exe -demosaic DFPD_R -CPU -pattern GRBG -i "%%s" -o "%%~ns.ppm"
pause
mogrify -format png ephemeral:*.ppm