「大量のファイル名を一つずつ変更するのが面倒…」
「ファイル名に共通のキーワードを追加・削除したい」
そんなときこそ、PowerShellを使った一括リネームが便利です。
この記事では、PowerShellでファイル名を一括変更する方法をわかりやすく解説します。
PowerShellでできること一覧
PowerShellでは、以下のような柔軟なリネーム操作が可能です。
- ファイル名にプレフィックスやサフィックスを追加
- ファイル名の一部を置換(例:「ver1」→「ver2」)
- 拡張子を一括変更
- 連番の追加(file1.txt, file2.txt など)
それでは、実際の使い方を見ていきましょう。
ファイル名の先頭に文字列を追加する
$folder = "C:\Users\YourName\Documents"
Get-ChildItem -Path $folder -File | ForEach-Object {
$newName = "NEW_" + $_.Name
Rename-Item $_.FullName -NewName $newName
}
解説
- Get-ChildItem でフォルダ内のファイル一覧を取得
- ForEach-Object で1つずつ処理
- “NEW_” + $_.Name でファイル名の先頭に文字列を追加
- Rename-Item で新しい名前に変更
例:report.docx → NEW_report.docx
ファイル名の一部を置換する
$folder = "C:\Users\YourName\Documents"
Get-ChildItem -Path $folder -File | ForEach-Object {
$newName = $_.Name -replace "old", "new"; Rename-Item $_.FullName -NewName $newName
}
解説
- -replace はPowerShellの置換演算子
- “old” を “new” に置き換えます
例:old_report.txt → new_report.txt
拡張子を一括変更する
$folder = "C:\Users\YourName\Documents"
Get-ChildItem -Path $folder -Filter "*.txt" | ForEach-Object {
$base = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)
$newName = "$base.csv"
Rename-Item $_.FullName -NewName $newName
}
例:log1.txt → log1.csv
拡張子の変更も簡単にできます。
連番をつけてリネームする
$folder = "C:\Users\YourName\Documents"
$count = 1
Get-ChildItem -Path $folder -File | Sort-Object Name | ForEach-Object {
$ext = $_.Extension
$newName = "file_$count$ext"
Rename-Item $_.FullName -NewName $newName
$count++
}
結果例
- data1.csv → file_1.csv
- data2.csv → file_2.csv
ファイルを順番に並べて、連番付きで名前をつけ直すスクリプトです。
注意点とトラブル対策
上書き注意!
同じファイル名が存在すると上書きエラーになります。スクリプトを実行する前に、バックアップを必ず取りましょう。
日本語ファイルもOK?
PowerShellはUTF-8に対応しているので、日本語のファイル名も問題なく扱えます。 ただし、環境によって文字化けすることがあるので、念のため日本語名は注意して扱ってください。
まとめ
PowerShellを使えば、ファイル名の一括変更が高速かつ正確に行えます。手作業での面倒な作業も、スクリプト1本であっという間です。
今回紹介したスクリプトを応用すれば、業務効率が格段にアップします。日々の作業にぜひ取り入れてみてください。