Windows 批处理文件以循环文件夹中的文件并运行Exe以获取信息
我正在写一个*.BAT文件来计算文件夹中每个GIF文件中的帧数。将所有这些都写入TXT文件会很好,但我还没有做到这一点 我可以从命令行为单个文件执行此操作 这是我想要的,但它不会向窗口输出帧数。 下一行是它应该为单个文件做什么的示例Windows 批处理文件以循环文件夹中的文件并运行Exe以获取信息,windows,batch-file,forfiles,Windows,Batch File,Forfiles,我正在写一个*.BAT文件来计算文件夹中每个GIF文件中的帧数。将所有这些都写入TXT文件会很好,但我还没有做到这一点 我可以从命令行为单个文件执行此操作 这是我想要的,但它不会向窗口输出帧数。 下一行是它应该为单个文件做什么的示例 "c:\program files\ImageMagick-6.8.9-Q8\identify.exe" -format %%n 14215349.gif 这两行应该对文件夹中的每个文件执行相同的操作。 但是,它们只是响应命令,而不是显示其输出 set "fram
"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行没有;他们只是回显命令。此代码起作用:
for %%I in (*.gif) do "c:\program files\ImageMagick-6.8.9-Q8\identify.exe" -format %%n %%I >>FramesList.txt
pause
谢谢
我希望我能再要求一件事。我得到的输出仅为整数,在一行上,文件名没有空格。如何编写此文件,使FramesList.txt文件在每行显示帧数整数(不超过3位),后跟文件名?我建议您使用类似以下内容:
@Echo关闭
对于(*.gif)中的%%K执行If/I“%%~xK”==”.gif”(
%ProgramFiles%\ImageMagick-6.8.9-Q8\identify.exe”-格式“%%[n]%[f]”“%%%K”
)>>“FramesList.txt”
在上面的示例中,为了安全起见,我使用了%%K
,因为没有使用%K
的短格式属性,并且出于识别目的,它是一个独特的字符。此外,出于同样的原因,我决定对图像数量和文件名使用长格式属性百分比转义,即%[n]
和%[f]
,因为在批处理文件中,%%n
和%%f
可能与元变量的相混淆
如果包含语句是因为*.gif
没有循环通过扩展名为.gif
的文件,则它会循环以.gif
开头的所有扩展名。虽然您可能没有任何与此场景匹配的选项,但没有真正的理由不添加额外的安全性。您是否考虑过从forfiles命令中删除echo
<代码>:)
不要将文件用于此任务。对
使用命令。打开cmd窗口并运行获取/?
以获取帮助。我没有安装Image Magick,因此不知道输出的是什么,但是类似于(*.gif)中%%I的do”%ProgramFiles%\ImageMagick-6.8.9-Q8\Identification.exe“-format%%n”%%I”>>FramesList.txt
应该会对您有所帮助。非常奇怪的行为(我写了脚本,但不是用这种语言写的很多,所以我知道它在做什么,但我不知道如何修复它)。它写的是1)第一个文件的帧数,2)然后文件名重复了那么多次(如果只重复一次就好了),然后不对下一个文件重复:它只(2)对下面的每个文件重复(也许它也需要一个线路反馈)。