PowerShellでファイル名を一括置換する簡単な例
前提
-
概要
- PowerShellでファイル名の簡単な置換をやりたい人向け
- とりあえずこれだけでも素早くできれば、業務で楽ができるという内容
- もっと色々やりたい人は、こちらがよい。
-
注意事項
- PowerShellスクリプトの文字エンコーディングは
Shift JIS
にする。 - ※ PowerShellで日本語を含むスクリプトを書く場合は、UTF8のBOMあり、もしくはShift JISになる。
- PowerShellスクリプトの文字エンコーディングは
-
実施環境
- 以下のスクリプトは、変更対象のファイルが存在するフォルダで起動するものとする。
ファイル名の単純な変更
-
シチュエーション
- フォルダ内に
〇〇_test_reslut.log
というファイルがたくさんあるとする。 - これを一括で
〇〇_unit_test_reslut.log
というファイル名に変更したいとする。
- フォルダ内に
-
コード
# ファイル名の最後が .log で終わるファイルを取得する。 $File = Get-ChildItem ./ -Name | Where-Object {$_ -match '.log$'} foreach ($OldName in $File) { # _test の部分を _unit_test に変更する。 $NewName = $OldName.Replace('_test', '_unit_test') # ファイル名を変更する。 Rename-Item -Path $OldName -NewName $NewName }
日付のフォーマットを変更したい
-
シチュエーション
- フォルダ内に
〇〇_test_20190303.log
のような形式で日付の入ったファイルがたくさんある。 - これを一括で
〇〇_test_2019-03-03.log
という形式のファイル名に変更したいとする。
- フォルダ内に
-
コード
# ファイル名の最後が ._<数字8桁>_log で終わるファイルを取得する。 $File = Get-ChildItem ./ -Name | Where-Object {$_ -match '_\d{8}.log$'} foreach ($OldName in $File) { # <数字8桁>の部分の形式を変える。 $NewName = $OldName -replace '_test_(\d{4})(\d{2})(\d{2})', '_test_$1-$2-$3' # ファイル名を変更する。 Rename-Item -Path $OldName -NewName $NewName }