2013年8月11日日曜日

ExIf情報より画像ファイルを撮影日ごとにフォルダ分けする

概要

デジカメで撮った画像が1つのフォルダの中にたまってしまっているので
ExIf情報より撮影日ごとにフォルダ分けて整理する
・今回はmove(移動)ではなくてcopy(コピー)にする

コピー元(フォルダ)とコピー先(フォルダ)を指定して実行
・指定したコピー元が存在しない場合はコピーを行わない
・指定したコピー先が存在しない場合は作成してコピーを行う
・対象ファイルは「jpeg」「jpg」固定(大文字・小文字は気にしない)
・ExIf情報に撮影日時が存在しない場合は「unknown」フォルダに移動
・コピー先に対象ファイルが存在する場合はメッセージを出力してコピーしない

関数


実行例

# 実行
PS > Copy-ImagesByDateTimeOriginal -CopyFolderPath "C:DCIM" -DestFolderPath "C:DateTimeOriginal"

メモ

.Net Frameworkを呼び出す

[完全修飾名のクラス]::静的メソッド(引数)

画像ファイルのメタデータを取得

PS > [System.Drawing.Imaging.Metafile]::FromFile(<<画像ファイルのフルパス>>)
例)
PS >[System.Drawing.Imaging.Metafile]::FromFile("C:\DateTimeOriginal\Blue hills.jpg")

Tag                  : 
PhysicalDimension    : {Width=800, Height=600}
Size                 : {Width=800, Height=600}
Width                : 800
Height               : 600
HorizontalResolution : 300
VerticalResolution   : 300
Flags                : 77960
RawFormat            : [ImageFormat: b96b3cae-0728-11d3-9d7b-0000f81ef32e]
PixelFormat          : Format24bppRgb
Palette              : System.Drawing.Imaging.ColorPalette
FrameDimensionsList  : {7462dc86-6180-4c7e-8e3f-ee7333a7a483}
PropertyIdList       : {282, 283, 296, 20515...}
PropertyItems        : {282, 283, 296, 20515...} 

フォルダ配下の指定した拡張子のファイル情報を取得(Get-ChildItem)

・引数[-Include]を指定して対象となる拡張子のファイル情報を取得
※複数の拡張子を指定する場合はカンマ「,」を使用
※拡張子の大文字、小文字は気にする必要はなし

PS > Get-ChildItem -Path <<フォルダのフルパス>> -Recurse -Include *.<<拡張子>>, *.<<拡張子>>
■補足
例1)フォルダ・ファイル情報を取得
PS > Get-ChildItem -Path C:\sample

    ディレクトリ: C:\sample


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2013/07/09     13:59            sample
-a---        2013/07/09     13:57          0 sample1.txt
-a---        2013/07/09     13:58          0 sample2.txt
例2)そのまま引数「Include」で拡張子を指定したが取得できない
PS > Get-ChildItem -Path C:\sample -Include *.txt

# 表示されない
例3)「フォルダのフルパス」の後ろに「\*」を追加して取得可能
PS > Get-ChildItem -Path C:\sample\* -Include *.txt

    ディレクトリ: C:\sample


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2013/07/09     13:57          0 sample1.txt
-a---        2013/07/09     13:58          0 sample2.txt

※サブフォルダ配下取得する場合(Recurseを指定)は特に気にしなくてよかった

パスと子パスを 1 つのパスに結合「Join-Path」

PS > Join-Path -Path <<パス>> -ChildPath <<子パス>>

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。