フォルダー内の画像を取得し、寸法を .txt ファイルに印刷するスクリプト

フォルダー内の画像を取得し、寸法を .txt ファイルに印刷するスクリプト

タイトルの通り、フォルダー内のすべての画像 (JPG、PNG、GIF など) を「ファイル名」と「ピクセル寸法」とともに .txt ファイルに印刷する Win 7 用のスクリプトはありますか?コマンド ライン
で試してみましたがdir、名前、ファイル サイズなどしかリストされませんでした。


ExifToolによる解決策

これは最高の取引だと思います。.exe のファイル名にコマンドがすでにコード化されているので、どこでも使用できるドラッグ アンド ドロップ スクリプトです。

アップデート
便宜上、exeのインラインファイル名を次のように少し変更しました。

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

この方法では、.txt 出力を画像ごとに 1 行に最小限に抑え ( -T)、再帰オプション ( -r) を追加してサブフォルダーも処理できるようにしました。


ImageMagickによるソリューション

以下に、ImageMagick を使用したソリューションを掲載しました。これは非常に迅速かつシンプルですが、もちろんライブラリがインストールされている必要があります。

答え1

使用Exifツール(ポータブル実行可能ファイルがexiftool.exe):

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

OKの解決策イメージマジックシンプルで迅速です(ただし、もちろんライブラリが必要です)。

興味のあるフォルダでコマンド行を開き(フォルダウィンドウ内でShift+ を押して「ここでコマンドウィンドウを開く」を選択)、コマンドプロンプトでこれを使用します。RightClick

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

を呼び出し%f filename、"WIDTHxHEIGHT" のようにフォーマットします%w width%h height

詳細はこちら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

関連情報