PowershellでExifから撮影日時を取得する。
「撮影日時」っぽいタグがいくつかあるから、とりあえず全部拾ってみた。それらがそれぞれ何を意味するかは...今後の宿題...
追記:調べました↓
Exif内の撮影日時の話 - 管理人Kのひとりごと
タグとIDの対応付けは以下を参考にしました。
PropertyItem.Id Property (System.Drawing.Imaging) | Microsoft Learn
param( [string]$filename # 処理対象ファイル名 ) # エラーがあった時点で処理終了 $ErrorActionPreference = "stop" [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void][System.Reflection.Assembly]::LoadWithPartialName("System.IO") # 撮影日取得処理 # 引数1 :Bitmapオブジェクト # 戻り値:なし function GetSatsueiDate($sourceImage){ $propDate="" # Exif情報を取得 $private:properties = $sourceImage.PropertyItems foreach($property in $properties){ if($property.Id -eq 306){ #0x0132 PropertyTagDateTime $propDate = [System.Text.Encoding]::ASCII.GetString($property.Value) echo "PropertyTagDateTime:$propDate" } elseif($property.Id -eq 36867){ #0x9003 PropertyTagExifDTOrig $propDate = [System.Text.Encoding]::ASCII.GetString($property.Value) echo "PropertyTagExifDTOrig:$propDate" } elseif($property.Id -eq 36868){ #0x9004 PropertyTagExifDTDigitized $propDate = [System.Text.Encoding]::ASCII.GetString($property.Value) echo "PropertyTagExifDTDigitized:$propDate" } } } # メイン処理 # 引数1 :元画像ファイルのフルパス # 戻り値:なし function script:Main($originalFileName){ $private:sourceImage = $null try{ # 元画像取得(Bitmap) $sourceImage = New-Object System.Drawing.Bitmap($originalFileName) # 撮影日取得 GetSatsueiDate $sourceImage # 元Bitmapを閉じる $sourceImage.Dispose() echo "終了しました:$originalFileName" }catch{ echo "例外が発生しました:$error" }finally{ try{ if($null -ne $sourceImage){ $sourceImage.Dispose() } }catch{ echo "画像クローズ時の例外:$error" } } } # 撮影日取得処理の実行 Main $filename
実行結果は以下の通りです。
PS C:\Users\hoge\Desktop\撮影日取得> .\getSatsueiDate.ps1 .\P1130910.JPG PropertyTagDateTime:2016:12:23 17:17:48 PropertyTagExifDTOrig:2016:12:23 17:17:48 PropertyTagExifDTDigitized:2016:12:23 17:17:48 終了しました:.\P1130910.JPG PS C:\Users\hoge\Desktop\撮影日取得>