概要
デジカメで撮った画像が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 <<子パス>>