« * Powershellの文字列検索でアルファベットの大文字と小文字を区別 | トップページ | * Powershellの-matchで文字列正規表現での部分文字列を取得,(?<>?)の名前付けではまったが理解が深まった »

2020年10月10日 (土)

* Powershellでデジカメ・スマートフォンの写真の撮影日時を取得し,後方参照で文字列置換

:CATEGORIES: Powershell

(Get-ChildItem -Recurse | ? { ! $_.PSIsContainer } | Measure-Object).Count $file_path = "C:\Users\(ファイルの絶対パス)\2002-12-29_163215_告発事件一件記録(写真資料・撮影日時).jpg" [Reflection.Assembly]::LoadWithPartialName("System.Drawing") | Out-Null $img = $null $img = New-Object Drawing.Bitmap($file_path) $date = ($img.PropertyItems | Where-Object{$_.Id -eq 306}).value $date = [Text.Encoding]::ASCII.GetString($date) $date = $date -replace "(....):(..):(..) (..):(..):(..)", '$1-$2-$3_$4$5$6'

PS D:> echo $date 2002-12-29_163215

参考: デジカメ、スマートフォンなどで撮影した画像、動画ファイルをリネーム後月ごとのフォルダに移動するスクリプト · GitHub https://gist.github.com/ebibibi/4175880?fbclid=IwAR3q7utypxoxlekjeQBTI-CMgWhg555FXrMPV7pvPDLIYkkLzgfQL6knUqY 後方参照はシングルクォートで - コンピュータってすごいらしい https://kyasmt.hatenablog.com/entry/20091215/1260863095

 「$date.Replace('0', 'x').Replace('2', 'y').Replace('1', 'z')」という形式での正規表現,後方参照はできないみたいです。少し調べたところ,次のページによると,-replaceは,オプション指定ではなく演算子のようです。

PowerShell - 正規表現 | powershell Tutorial https://sodocumentation.net/ja/powershell/topic/6674/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE

 「 [regex]::Replace($date, "(....):(..):(..) (..):(..):(..)", '$1-$2-$3_$4$5$6')」というやり方もできました。こちらの方が他のプログラム言語に近い書式で,可読性が良さそうに思います。

|

« * Powershellの文字列検索でアルファベットの大文字と小文字を区別 | トップページ | * Powershellの-matchで文字列正規表現での部分文字列を取得,(?<>?)の名前付けではまったが理解が深まった »