更新日、またはメディアの撮影日を厳選にファイル名をリネームするスクリプト
自宅のファイルサーバの写真の名前を統一しようと、フリーソフトのツールを使ったが
一部の写真(3gpファイル、MOVファイル)の名前が統一できなかった。
そこで、PowerShellの勉強を兼ねて作成したもの
PowerShell初心者なので自分のコードに無駄も多いことはご愛敬
しかし、PowerShellってなかなかいいスクリプトだったんだ!
この時間のできた時こそスキルアップのため勉強しよう!
#取得フォーマット YYYY-MM-DD-H-M-00-連番 連番は当該関数をコールする度にカウントアップ
function Get更新日String([string]$FilePath, [string]$Extension, [ref]$連番){#echo $FolderPath
#write-host $FilePath
#write-host $連番.value
#write-host $連番.value.ToString(“0000”)
#$連番.value = $連番.value + 1
#write-host $連番.value.ToString(“0000”)# ファイルの指定
$File =$script:Folder.parseName($FilePath)# 詳細プロパティの取得 いずれかを利用する
#$GET = $script:Folder.GetDetailsOf($File,208) #メディアの撮影日
$GET = $script:Folder.GetDetailsOf($File,3) #更新日write-host $Get
$a = $GET.Replace(“/”,”-“)
$b = $a.Replace(“:”,”-“)
$c = $b.Replace(” “,”-“)
$d = $c + “-00” #撮影日時やメディアの撮影日に秒がないため00秒を固定で詰める
$e = $連番.value.ToString(“-0000”)
$連番.value++ #ここでインクリメント$f = $d + $e + $Extension
return $f}
#開始連番を指定
$連番 = 1#ターゲットのファイルパスを指定
$FolderPath = “\\192.168.x.x\photo\”# シェルオブジェクトを作成(スクリプト内でグローバル利用する)
$script:Shell = New-Object -ComObject Shell.Application# フォルダの指定(スクリプト内でグローバル利用する)
$script:Folder = $Shell.NameSpace($FolderPath)#指定パスへ移動
cd $FolderPath#ファイル名を取得
#Get-ChildItem * -Recurse -Filter “*.jpg” | Select-Object Name, Extension #取得結果確認(デバッグ)#”0001-*.3gp” の指定を変更すると、対象ファイルを変更できる
$3gpFiles = Get-ChildItem * -Filter “0001-*.3gp” | Select-Object Name, Extension
foreach ($OldName in $3gpFiles) {
write-host $OldName.Name
$NewFileName = Get更新日String $OldName.Name $OldName.Extension ([ref]$連番)
write-host $NewFileName# ファイル名を変更する。 今回処理するファイル名には、一律の通番を振るのでかぶらない
Rename-Item -Path $OldName.Name -NewName $NewFileName}
#例 MOVファイル当、他のもあった場合は、上記処理を丸ごとコピーし ”0001-*.MOV” を変更する。
$3gpFiles = Get-ChildItem * -Filter “0001-*.MOV” | Select-Object Name, Extension
foreach ($OldName in $3gpFiles) {
write-host $OldName.Name
$NewFileName = Get更新日String $FolderPath $OldName.Name $OldName.Extension ([ref]$連番)
write-host $NewFileName# ファイル名を変更する。 今回処理するファイル名には、一律の通番を振るのでかぶらない
Rename-Item -Path $OldName.Name -NewName $NewFileName}
コメント