批处理文件以循环遍历文件夹中的文件并运行Exe以获取信息

时间:2019-05-27 05:55:35

标签: windows batch-file forfiles

我正在编写一个* .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命令。

2 个答案:

答案 0 :(得分:0)

此代码有效:

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

谢谢。

我希望我能再要求一件事。我得到的输出仅是整数,一行中没有文件名空格。我该怎么写,以便FramesList.txt文件在每行中显示帧计数整数(从不超过3位)和文件名?

答案 1 :(得分: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%%f可能与For元变量混淆。

之所以包含If语句,是因为*.gif不会循环访问扩展名为.gif的文件,而是循环所有以.gif开头的扩展名。 虽然您可能没有与之匹配的任何产品,但没有真正的理由不增加额外的安全性