PowerShellは、Windowsで利用できる非常に強力なコマンドラインツールです。中でも「Rename-Item」コマンドは、ファイルやフォルダの名前を変更する際に活躍します。GUIでの作業と違い、複数のファイルをまとめてリネームしたり、自動化スクリプトに組み込んだりできるのが魅力です。この記事では、Rename-Itemコマンドの基本的な使い方から応用テクニックまで、初心者にもわかりやすく丁寧に解説していきます。
Rename-Itemとは?
Rename-Item
は、PowerShellでファイルやディレクトリ(フォルダ)の名前を変更するためのコマンドレットです。
基本構文は以下の通りです。
Rename-Item -Path <変更対象のパス> -NewName <新しい名前>
たとえば、old.txt
というファイルを new.txt
に変更する場合は次のように記述します。
Rename-Item -Path "C:\Users\Example\old.txt" -NewName "new.txt"
このように、パスと新しい名前を指定するだけで、簡単にリネームが可能です。
フォルダの名前を変更する方法
Rename-Itemはファイルだけでなくフォルダ(ディレクトリ)にも使えます。以下の例では「OldFolder」という名前のフォルダを「NewFolder」に変更しています。
Rename-Item -Path "C:\Users\Example\OldFolder" -NewName "NewFolder"
注意点として、指定するのはフォルダのパス全体です。フォルダ名だけを変えたい場合でも、親フォルダまでのパスを指定する必要があります。
ワイルドカードを使った複数ファイルのリネーム
単一ファイルのリネームだけでなく、複数ファイルを一括で変更したいケースもあります。たとえば、.txt
ファイルすべてに接頭語 backup_
をつけたい場合は、次のようにします。
Get-ChildItem -Path "C:\Logs" -Filter "*.txt" | ForEach-Object {
$newName = "backup_" + $_.Name
Rename-Item -Path $_.FullName -NewName $newName
}
この例では、Get-ChildItem
で対象ファイルを取得し、ForEach-Object
を使って一つずつリネームしています。ワイルドカードと組み合わせることで、柔軟なバッチ処理が可能になります。
拡張子だけを変更する
特定のファイル拡張子だけを別のものに変えたい場合にもRename-Itemは有効です。例えば、.log
ファイルを.txt
に変更するには以下のようにします。
Get-ChildItem -Path "C:\Logs" -Filter "*.log" | ForEach-Object {
$newName = $_.BaseName + ".txt"
Rename-Item -Path $_.FullName -NewName $newName
}
BaseName
は拡張子を除いたファイル名なので、新しい拡張子を追加するだけで目的を達成できます。
名前に日付や連番を加える
レポートファイルやログなど、ファイル名に日付や番号を付けたいときもPowerShellなら簡単です。以下のスクリプトでは、すべての.txt
ファイルに現在の日付をプレフィックスとして追加します。
$today = Get-Date -Format "yyyyMMdd"
Get-ChildItem -Path "C:\Reports" -Filter "*.txt" | ForEach-Object {
$newName = "$today`_$($_.Name)"
Rename-Item -Path $_.FullName -NewName $newName
}
また、連番を付ける場合はカウンタ変数を使えば実現できます。
$i = 1
Get-ChildItem -Path "C:\Images" -Filter "*.jpg" | Sort-Object Name | ForEach-Object {
$newName = "image_$i.jpg"
Rename-Item -Path $_.FullName -NewName $newName
$i++
}
このように自動で名前を生成できるため、手動での作業が不要になります。
上書きに注意!リネームの落とし穴
Rename-Itemコマンドで気をつけたいのは、既に存在する名前にリネームしようとするとエラーになるという点です。
たとえば、すでにreport.txt
というファイルがあるのに、別のファイルも同じ名前にしようとすると、次のようなエラーになります。
mathematicaコピーする編集するRename-Item : ファイル 'C:\Reports\report.txt' は既に存在します。
このような場合は、リネームする前に既存のファイルがあるかを確認するロジックを組み込みましょう。
$newName = "report.txt"
$fullPath = "C:\Reports\$newName"
if (-not (Test-Path $fullPath)) {
Rename-Item -Path "C:\Reports\report_old.txt" -NewName $newName
} else {
Write-Host "既に同名のファイルが存在しています。"
}
安全なスクリプトを書くためにも、ファイルの存在チェックは重要です。
Rename-Itemがうまく動かないときの対処法
PowerShellでRename-Itemがうまく動作しない場合、以下の点を確認してみてください。
- ファイルが使用中ではないか
→ 他のアプリケーションで開かれていると変更できません。 - アクセス権限があるか
→ 対象のファイルやフォルダに対して書き込み権限が必要です。 - 相対パスと絶対パスの使い分け
→ スクリプトの実行場所とパスの指定にズレがあるとエラーになります。 - 日本語や特殊文字のエスケープ
→ 特殊文字(スペース・全角文字など)はダブルクォーテーションで囲むようにしましょう。
Rename-Item -Path "C:\Users\Example\旧ファイル名.txt" -NewName "新ファイル名.txt"
まとめ
PowerShellのRename-Item
コマンドは、ファイルやフォルダの名前を効率よく変更するのに欠かせないツールです。基本的な使い方を押さえるだけでなく、Get-ChildItem
やForEach-Object
との組み合わせにより、複数ファイルの一括処理や拡張子の変更、日付や連番の追加など、様々な応用が可能です。
ただし、リネーム先の重複やファイルの使用中といったエラーにも注意が必要です。しっかりとエラーハンドリングを行えば、日常業務の中で非常に強力な自動化ツールとして活用できるでしょう。