「大量のファイル名を一括で変更したい」
「ファイル名に日付や連番を入れたい」
そんなときに役立つのが PowerShellによるファイル名変更(リネーム) です。
Windowsのエクスプローラーで1つずつ名前を変えるのはとても面倒ですが、PowerShellを使えば一瞬で終わります。
この記事では、Windows PowerShellを使ってファイル名を変更する基本方法から、応用的なリネームまで、具体例を交えてわかりやすく解説します。
PowerShellでファイル名を変更する基本

Rename-Itemの使い方
PowerShellでファイル名を変更する最もシンプルなコマンドは Rename-Item
です。
単一ファイルの例
Rename-Item -Path "C:\data\old.txt" -NewName "new.txt"
これで C:\data\old.txt
が new.txt
に名前変更されます。
フォルダ内で実行する場合
Rename-Item -Path ".\old.txt" -NewName "new.txt"
カレントディレクトリ(.)での変更も簡単です。
Rename-Itemの基本パラメータ
- -Path: 変更したいファイルのパス
- -NewName: 新しいファイル名
- -WhatIf: 実際に変更せずに結果を確認(テスト実行)
Rename-Item -Path "old.txt" -NewName "new.txt" -WhatIf
複数ファイルをまとめてリネームする方法
Get-ChildItemと組み合わせる
例えば、.txt
ファイルをすべて「backup_」を付けた名前にしたい場合:
Get-ChildItem C:\data\*.txt | ForEach-Object {
$newName = "backup_" + $_.Name
Rename-Item $_.FullName -NewName $newName
}
コマンドの説明
Get-ChildItem
: ファイル一覧を取得ForEach-Object
: 1つずつ処理$_
: 現在処理中のファイルを指します$_.Name
: ファイル名のみ$_.FullName
: フルパス
実行結果
sample1.txt → backup_sample1.txt
sample2.txt → backup_sample2.txt
のように一括で変更されます。
特定の文字列を置換する
ファイル名の一部を別の文字に変更したい場合:
Get-ChildItem C:\data\*.txt | ForEach-Object {
$newName = $_.Name -replace "old", "new"
Rename-Item $_.FullName -NewName $newName
}
これで「old」を含むファイル名が「new」に変更されます。
実践的なリネーム術
連番を付ける方法
基本的な連番付け
ファイルに1,2,3…と番号を付与:
$i = 1
Get-ChildItem C:\images\*.jpg | Sort-Object Name | ForEach-Object {
$newName = "photo_$i.jpg"
Rename-Item $_.FullName -NewName $newName
$i++
}
0埋め連番(01, 02, 03…)
$i = 1
Get-ChildItem C:\images\*.jpg | Sort-Object Name | ForEach-Object {
$newName = "photo_{0:D3}.jpg" -f $i
Rename-Item $_.FullName -NewName $newName
$i++
}
実行結果
photo_001.jpg
photo_002.jpg
photo_003.jpg
...
のように連番で並びます。
日付を付ける方法
現在日付をファイル名に入れる
$date = Get-Date -Format "yyyyMMdd"
Get-ChildItem C:\logs\*.log | ForEach-Object {
$newName = "$date" + "_" + $_.Name
Rename-Item $_.FullName -NewName $newName
}
ファイル作成日を使う
Get-ChildItem C:\photos\*.jpg | ForEach-Object {
$date = $_.CreationTime.ToString("yyyyMMdd")
$newName = "$date" + "_" + $_.Name
Rename-Item $_.FullName -NewName $newName
}
実行結果
log1.log → 20250705_log1.log
log2.log → 20250705_log2.log
のように、ファイル名に日付が自動で入ります。
拡張子を変更する
Get-ChildItem C:\data\*.txt | ForEach-Object {
$newName = $_.BaseName + ".bak"
Rename-Item $_.FullName -NewName $newName
}
これで.txt
ファイルが.bak
ファイルに変更されます。
エラーを防ぐポイント

上書き防止
PowerShellの Rename-Item
は同名ファイルがあるとエラーになります。同じ名前ができそうなときは注意しましょう。
重複チェック付きリネーム
Get-ChildItem C:\data\*.txt | ForEach-Object {
$newName = "backup_" + $_.Name
$newPath = Join-Path $_.Directory $newName
if (-not (Test-Path $newPath)) {
Rename-Item $_.FullName -NewName $newName
} else {
Write-Host "スキップ: $newName は既に存在します"
}
}
名前に使えない文字を除去
ファイル名に \ / : * ? " < > |
は使えません。必要なら -replace
で置換しましょう。
$name = "sample:file.txt"
$cleanName = $name -replace "[:*/?<>|\\]", "_"
事前テスト実行
本格的にリネームする前に、-WhatIf
を使って結果を確認:
Get-ChildItem C:\data\*.txt | ForEach-Object {
$newName = "backup_" + $_.Name
Rename-Item $_.FullName -NewName $newName -WhatIf
}
よくある質問
Q: 元のファイル名に戻したい場合はどうすればいいですか?
A: リネーム前にバックアップを取るか、元の名前を記録しておきましょう。
# リネーム前にCSVで記録
Get-ChildItem C:\data\*.txt | Select-Object Name, FullName | Export-Csv "backup_list.csv"
Q: 大量のファイルを処理する際の注意点は?
A: 数千個のファイルを処理する場合は、まず小さなテストフォルダで試してから本番実行することをおすすめします。
Q: サブフォルダ内のファイルも含めて処理したい場合は?
A: -Recurse
パラメータを使用します:
Get-ChildItem C:\data\*.txt -Recurse | ForEach-Object {
$newName = "backup_" + $_.Name
Rename-Item $_.FullName -NewName $newName
}
まとめ
Windows PowerShellを使えば、以下のことが簡単にできます:
Rename-Item
で簡単にファイル名を変更Get-ChildItem
と組み合わせて大量ファイルを一括リネーム- 日付や連番を付けて自動で整理
- 文字列の置換や拡張子の変更
コメント