大量のファイル名を一つずつ変更するのは、意外と時間がかかります。
例えば、
- ファイル名の先頭に文字を追加したい
- ファイル名の一部をまとめて置換したい
- 特定の拡張子だけリネームしたい
- 大量のファイルに連番を付けたい
- ファイル名に日付を追加したい
このような作業は、PowerShellを使えば一括で処理できます。
この記事では、PowerShell初心者向けに、ファイル名を一括変更する基本から、実務で使えるリネーム方法まで、具体的なサンプルを使って解説します。
PowerShellでできること一覧
PowerShellでは、以下のような柔軟なリネーム操作が可能です。
- ファイル名にプレフィックスやサフィックスを追加
- ファイル名の一部を置換
- 拡張子を一括変更
- 連番の追加(file1.txt, file2.txt など)
- ファイル名に日付を追加
- 特定の拡張子だけを対象にする
- サブフォルダー内のファイルも対象にする
それでは、実際の使い方を見ていきましょう。
PowerShellでファイルを操作する前に、ファイルの更新日時を確認して整理したい場合は、 更新日順に一覧表示する方法も便利です。 【PowerShell】フォルダ内のファイルを更新日順に一覧表示する方法
PowerShellでファイルサイズを一覧表示する方法 【PowerShell】ファイルサイズを一覧表示して重たいファイルを特定する方法
ファイル名の先頭に文字列を追加する
ファイル名の先頭に文字列を追加します。
例えば、
report.docx sales.xlsx data.csv
というファイル名を、
NEW_report.docx NEW_sales.xlsx NEW_data.csv
のように変更します。
■コード例
$folder = "C:\Users\YourName\Documents"
Get-ChildItem -Path $folder -File | ForEach-Object {
$newName = "NEW_" + $_.Name
Rename-Item $_.FullName -NewName $newName
}
ファイル名の一部を置換する
-replaceを使って文字列を置換する
PowerShellでは、-replaceを使うことで、ファイル名に含まれる文字列をまとめて置換できます。例えば、
old_report.txt old_sales.txt old_data.txt
というファイルを、
new_report.txt new_sales.txt new_data.txt
のように変更します。
■コード例
$folder = "C:\Users\YourName\Documents"
Get-ChildItem -Path $folder -File | ForEach-Object {
$newName = $_.Name -replace "old", "new";
Rename-Item $_.FullName -NewName $newName
}
ファイル名の一部を削除する
ファイル名から不要な文字をまとめて削除することもできます。
例えば、
temp_report.xlsx temp_sales.xlsx temp_data.xlsx
というファイルから、先頭の「temp_」を削除して、
report.xlsx sales.xlsx data.xlsx
のように変更します。
■コード
$folder = "C:\Users\YourName\Documents"
Get-ChildItem -Path $folder -File | ForEach-Object {
$newName = $_.Name -replace "temp_", ""
Rename-Item $_.FullName -NewName $newName
}
拡張子を一括変更する
$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
拡張子の変更も簡単にできます。
注意:拡張子を変更してもファイル形式は変わりません
ここで行っているのは、ファイル名の拡張子を変更する処理です。
例えば、
.txt → .csv
と変更しても、ファイルの中身がCSV形式に変換されるわけではありません。
ファイル形式そのものを変換したい場合は、別途データ変換処理が必要です。
特定の拡張子だけリネームする
フォルダー内に複数種類のファイルがある場合、特定の拡張子だけを対象にすることもできます。
例えば、Excelファイルだけを対象にする場合は、-Filterを使います。
■コード例
$folder = "C:\Users\YourName\Documents"
Get-ChildItem -Path $folder -File -Filter "*.xlsx" |
ForEach-Object {
$newName = "backup_" + $_.Name
Rename-Item $_.FullName -NewName $newName
}
CSVなら「*.csv」、PDFなら「*.pdf」のように変更できます。
連番をつけてリネームする
連番をつけてリネームすることもできます。
例えば、
file1.csv file2.csv file3.csv
を、連番をつけて、
file1_001.csv file2_002.csv file3_003.csv
のように変更します。
■コード
$folder = "C:\Users\YourName\Documents"
$count = 1
Get-ChildItem -Path $folder -File |
Sort-Object Name |
ForEach-Object {
$ext = $_.Extension
$newName = "file_{0:D3}{1}" -f $count, $ext
Rename-Item $_.FullName -NewName $newName
$count++
}
ファイル名に日付を追加する
バックアップファイルや作業用ファイルなどでは、ファイル名に日付を付けておくと管理しやすくなります。
例えば、
report.xlsx sales.xlsx
を、
20261008_report.xlsx 20261008_sales.xlsx
のように変更します。
■コード例
$folder = "C:\Users\YourName\Documents"
$date = Get-Date -Format "yyyyMMdd"
Get-ChildItem -Path $folder -File |
ForEach-Object {
$newName = $date + "_" + $_.Name
Rename-Item $_.FullName -NewName $newName
}
サブフォルダー内のファイルもリネームする
フォルダーの中にあるサブフォルダーのファイルもまとめて処理したい場合は、-Recurseを使います。
■コード例
$folder = "C:\Users\YourName\Documents"
Get-ChildItem -Path $folder -File -Recurse |
ForEach-Object {
$newName = "backup_" + $_.Name
Rename-Item $_.FullName -NewName $newName
}
サブフォルダーまで対象になるため、実行前に対象ファイルを確認してください。
リネーム前に変更内容を確認する
一括リネームでは、対象ファイルを間違えると意図しないファイル名まで変更してしまう可能性があります。
そこで、実際にリネームする前に「どのような変更が行われるのか」を確認する方法を紹介します。
PowerShellでは、-WhatIfを使うと実際には変更せず、実行した場合の内容を確認できます。
■コード例
$folder = "C:\Users\YourName\Documents"
Get-ChildItem -Path $folder -File |
ForEach-Object {
$newName = "backup_" + $_.Name
Rename-Item $_.FullName -NewName $newName -WhatIf
}
まずは-WhatIfを付けて実行し、変更内容に問題がないことを確認します。
問題がなければ、-WhatIfを外して本番実行します。
「対象ファイルを確認 → -WhatIfで確認 → 本番実行」という手順がおすすめです。
注意点とトラブル対策
変更後のファイル名がすでに存在する
一括リネームでは、変更後のファイル名がすでに存在するとエラーになる場合があります。
例えば、
data.txt
backup_data.txt
が存在している状態で、data.txtをbackup_data.txtに変更しようとすると、ファイル名が重複してしまいます。
変更前に、変更後のファイル名が重複しないか確認しましょう。
対象ファイルを間違えない
Get-ChildItemの指定によっては、想定より多くのファイルが対象になることがあります。
特に-Recurseを指定すると、サブフォルダー内のファイルまで対象になります。
初めて実行するときは、-WhatIfを付けて対象と変更内容を確認することをおすすめします。
日本語のファイル名も使える
PowerShellでは、日本語を含むファイル名も基本的に扱うことができます。
ただし、スクリプトの保存形式や実行環境によって文字化けが発生する場合があるため、日本語を扱う場合は実際の環境で確認してください。
まとめ
PowerShellを使えば、大量のファイル名をまとめて変更できます。
今回紹介した主な方法は次のとおりです。
- ファイル名の先頭や末尾に文字を追加する
- ファイル名の一部を置換する
- 不要な文字を削除する
- 特定の拡張子だけを対象にする
- 拡張子を一括変更する
- ファイルに連番を付ける
- ファイル名に日付を追加する
- サブフォルダー内のファイルも処理する
基本的には、Get-ChildItemで対象ファイルを取得し、Rename-Itemでファイル名を変更します。
特に一括処理では、いきなり実行するのではなく、
「対象ファイルを確認 → -WhatIfで変更内容を確認 → 本番実行」
という手順にすると安全です。
PowerShellでは、ファイルのリネームだけでなく、ファイルの検索・コピー・バックアップ・古いファイルの削除なども自動化できます。
同じ作業を繰り返しているなら、PowerShellで自動化できないか検討してみるとよいでしょう。
ファイルを定期的にバックアップしたい場合は、 PowerShellとタスクスケジューラを組み合わせる方法もあります。 PowerShellでバックアップを自動化する方法|タスクスケジューラで定期実行