Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理文件以循环文件夹中的文件并运行Exe以获取信息_Windows_Batch File_Forfiles - Fatal编程技术网

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

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

我正在写一个*.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行没有;他们只是回显命令。

此代码起作用:

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)对下面的每个文件重复(也许它也需要一个线路反馈)。