用于获取文件夹中图像并将其尺寸打印到 .txt 文件的脚本

用于获取文件夹中图像并将其尺寸打印到 .txt 文件的脚本

正如标题所述,是否有一个适用于 Win 7 的脚本,可以将文件夹中的所有图像(JPG、PNG、GIF 等)以及“文件名”和“像素尺寸”打印到 .txt 文件中?
我尝试使用dir命令行,但只列出名称、文件大小等。


使用 ExifTool 解决方案

我认为这是最佳选择,因为命令已经在 .exe 的文件名中编码,所以它完全是一个拖放脚本,可以在任何您想要的地方使用!

更新
为了方便起见,我稍微修改了 exe 的内联文件名,如下所示

ExifTool(-FileName -Imagesize -r -T -w+! %0finfo.txt -ext jpg --ext exe .).exe

这样,我将 .txt 输出减少到每个图像一行(-T),并添加了一个递归选项(-r),以便它也可以处理子文件夹。


使用 ImageMagick 的解决方案

下面我给出了使用 ImageMagick 的解决方案,它非常快捷和简单,但当然需要安装库。

答案1

使用Exif工具(可移植可执行文件重命名为执行程序):

exiftool -ImageSize -r .

这里图片大小是你感兴趣的标签名称,将打印图片宽度 x 图片高度。该-r开关使其递归处理子目录中的文件。

风俗输出字符串格式也很简单。例如:

exiftool -p "Image Name: \"$FileName\"$/Image Size: $ImageSize$/" -r .

在这种情况下,标签名称前面有 $。$/打印换行符。

注意:上述命令必须在命令提示符下输入。要将输出重定向到文本文件,您可以将> Details.txt这些命令附加到文本文件中。


如果你只想运行该程序并让它写入包含相关图像详细信息的文本文件,你可以重命名可执行文件如下:

ExifTool(-FileName -Imagesize -w+! %0fDetails.txt -ext gif --ext exe .).exe

这会将所有控制台输出(-w)写入名为详细信息.txt在当前目录中。在这种情况下,输出将包含当前目录中所有 GIF 的图像名称和大小。有关参数的更多详细信息-w,包括 和 的含义+!%0f在上述文档链接中找到。

你可以包括使用更多扩展来处理-ext jpg -ext png等等,或者-ext gif完全删除以使其读取所有支持的文件类型(包括您可能不想要的非图像)。

--ext exe用于排除所有 EXE(以便程序自己的可执行文件不包含在报告中)。

-r当然可以添加以实现递归处理。

很多鉴于该程序的强大功能(以及由于完整的 Perl 源代码是免费提供的,因此它的可扩展性),您可以使用该程序做更多的事情!

答案2

好的解决办法图像魔术师,简单快捷(但 ofc 需要库)。

在您感兴趣的文件夹中打开 cmd 行(在文件夹窗口内Shift+RightClick并选择“在此处打开命令窗口”),然后在 cmd 提示符中使用此

identify -format "%f %wx%h\r" *.jpg > info.txt

要求%f filename%w width格式%h height为“WIDTHxHEIGHT”

更多信息请点击此处http://www.imagemagick.org/script/escape.php

答案3

有一个PowerShell 脚本下面应该可以做到;只需更改列表和输出的目录。我在 Windows 8.1 和 Windows PowerShellISE 下进行了测试。

param( $folder = "E:\My Pictures", $outputFile = "E:\details.txt" )
$objShell = New-Object -ComObject Shell.Application
$fileList = @()
$attrList = @{}
$details = ( "Dimensions" )
$objFolder = $objShell.namespace($folder)
for ($attr = 0 ; $attr  -le 500; $attr++)
{
    $attrName = $objFolder.getDetailsOf($objFolder.items, $attr)
    if ( $attrName -and ( -not $attrList.Contains($attrName) ))
    {
        $attrList.add( $attrName, $attr )
    }
}
dir $folder -Recurse -Directory | ForEach-Object{
    $objFolder = $objShell.namespace($_.FullName)
    foreach($file in $objFolder.items())
    {
        foreach( $attr in $details)
        {
            $attrValue = $objFolder.getDetailsOf($file, $attrList[$attr])
            if ( $attrValue )
            {
                Add-Member -InputObject $file -MemberType NoteProperty -Name $("A_" + $attr) -value $attrValue
            }
        }
        $fileList += $file
        $fileList.Count
    }
}
$fileList | Export-Csv $outputFile -Delimiter ','
$fileList | Format-Table

相关内容