用於獲取資料夾中的圖像並將尺寸列印到 .txt 檔案的腳本

用於獲取資料夾中的圖像並將尺寸列印到 .txt 檔案的腳本

如標題所示,Win 7 是否有一個腳本可以將資料夾內的所有圖像(JPG、PNG、GIF ecc)以及「檔案名稱」和「像素尺寸」印在 .txt 檔案上?
我嘗試過dir在命令列上使用,但只列出名稱、檔案大小等。


ExifTool 的解決方案

在我看來,最好的交易是,命令已經編碼在 .exe 檔案名稱中,它完全是一個拖放腳本,可以在任何您想要的地方使用!

更新
為了方便起見,我將 exe 的內嵌檔名稍微修改為:

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

透過這種方式,我已將 .txt 輸出減少到每個圖像一行 ( -T),並添加了遞歸選項 ( -r),以便它也可以處理子資料夾。


使用 ImageMagick 解決方案

我用 ImageMagick 放置了我的解決方案,非常快速且簡單,但 ofc 需要安裝庫。

答案1

使用Exif工具(可移植可執行檔重新命名為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

相關內容