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

3

我有一个包含3个命令的.bat文件,这些命令单独在命令行中输入时可以正常运行,但是当我将它们作为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 was unexpected at this time

我使用fname和%s进行循环的原因是debayer.exe程序不理解@fname.pgm作为文件名,但它知道这意味着带入一个字符串,然后forfiles识别@fname并替换为当前文件名。
有什么解决这个问题的想法吗?
我已经尝试过:
1. 用%%代替%。 2. 在每个%前面加上^。 3. 添加上述代码中的CALL。 4. 在每行末尾添加分号。
2个回答

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

您也不需要forfiles命令。使用简单的for循环即可。

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

你想描述一下它失败的情况吗? - foxidrive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接