1

我正在编写一个 *.BAT 文件来计算文件夹中每个 GIF 文件中的帧数。将所有内容写入 TXT 文件会很好,但我还没有做到这一点。

我可以从命令行对单个文件执行此操作。

这可以满足我的要求,但它不会将帧数输出到窗口。下一行是它应该对单个文件执行的操作的示例。

"c:\program files\ImageMagick-6.8.9-Q8\identify.exe" -format %%n 14215349.gif

这两行应该对文件夹中的每个文件执行相同的操作。但是,他们只是回显命令,而不是显示其输出。

set "frames=^0x22c:\program^ files\ImageMagick-6.8.9-Q8\identify.exe^0x22^ -format^ %%n"
forfiles /m *.gif /c "cmd /c echo %frames% @file"

我唯一能看到错误的是双引号,但这表明不是这样:

"c:\program files\ImageMagick-6.8.9-Q8\identify.exe" -format %%n "14215349.gif"
pause

它应该为每个文件输出一个整数。第 1 行执行此操作。第 2 行和第 3 行没有;他们只是echo命令。

4

2 回答 2

1

此代码有效:

for %%I in (*.gif) do "c:\program files\ImageMagick-6.8.9-Q8\identify.exe" -format %%n %%I >>FramesList.txt
pause

谢谢。

我希望我可以再要求一件事。我得到的输出只有整数,在一行上,没有文件名空格。我该如何编写,以便 FramesList.txt 文件显示帧计数整数(不超过 3 位),后跟每行的文件名?

于 2019-05-27T16:47:39.027 回答
0

我建议你使用这样的东西:

@Echo Off
For %%K In (*.gif)Do If /I "%%~xK"==".gif" (
    "%ProgramFiles%\ImageMagick-6.8.9-Q8\identify.exe" -format "%%[n] %%[f]" "%%K"
)>>"FramesList.txt"

在上面的示例中,我使用%%K了安全性,因为没有使用短格式属性,%K并且它是一个独特的字符,用于识别目的。此外,出于同样的原因,我决定使用长格式属性百分比转义来表示图像数量和文件名,即%[n]和,因为来自批处理文件,并且可能与元变量混淆%[f]%%n%%fFor

包含该If语句是因为*.gif它不会循环遍历带有.gif扩展名的文件,它会循环所有以 . 开头的扩展名.gif虽然您可能没有任何符合这种情况的方案,但没有真正的理由不添加额外的安全性

于 2019-05-27T20:08:59.127 回答