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

我有一个3个命令.bat文件,可以像3个单独的命令一样运行(每次input1个命令行),但是当我把它们作为一个bat文件中的3行时不起作用。

这里的文件:

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意味着引入一个string,所以它是这样做的,然后forfiles认可@fname并用当前文件名replace它。

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

我努力了:

  1. 把%%而不是%
  2. 把每个%的面前
  3. 添加上面代码中的CALL
  4. 在每行的末尾添加分号。

谢谢!

首先删除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 

你也不需要文件。 直接循环将工作。

 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