Rename-Itemの使い方:ファイルやディレクトリの名前を変更する
Rename-Item コマンドレットを使用すると、指定したファイルやディレクトリの名前を変更できます。また、他のコマンドレットと組み合わせることで、複数のファイル名をまとめて変更することもできます。ここでは PowerShell における Rename-Item コマンドレットの使い方について解説します。
Rename-Itemコマンドレットの書式
Rename-Item コマンドレットは、指定したファイルやディレクトリの名前を変更するために使用します。 Rename-Item コマンドレットの書式は次の通りです。
Rename-Item [-Path] <String> [-NewName] <String> [-Force] [-PassThru] [-Credential <PSCredential>] [-WhatIf] [-Confirm] [<CommonParameters>]
Rename-Item はエイリアスとして ren、 rniが定義されています。
ren -> Rename-Item rni -> Rename-Item
ファイルの名前を変更するには次の書式を使用します。
Rename-Item -Path 名前を変更するファイルのパス -NewName 新しい名前
-Path および -NewName は省略可能なので、通常は次のように実行します。
Rename-Item 名前を変更するファイルのパス 新しい名前
※ Rename-Item は名前の変更のみを行うコマンドレットで、ファイルやディレクトリを別の場所へ移動することはできません。場所を変更したい場合は Move-Item コマンドレットを使用してください。詳しい使い方は「Move-Itemの使い方:ファイルやディレクトリを別の場所に移動する」を参照されてください。
それでは、ファイル c:\code\powershell\sample.txt の名前を report.txt に変更します。変更前に c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
次のように実行します。
Rename-Item c:\code\powershell\sample.txt report.txt
画面上には何も表示されません(正常に名前の変更が行われています)。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したファイルの名前が変更されたことが確認できました。
ディレクトリの名前を変更する
ファイルと同じようにディレクトリの名前も変更できます。ディレクトリは、空のディレクトリでも中にファイルが含まれているディレクトリでも、同じように名前を変更できます。
それでは、ディレクトリ c:\code\powershell\img の名前を picture に変更します。変更前に c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
次のように実行します。
Rename-Item c:\code\powershell\img picture
画面上には何も表示されません(正常に名前の変更が行われています)。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したディレクトリの名前が変更されたことが確認できました。
複数のファイルの名前の一部をまとめて変更する
条件に一致する複数のファイルに対して、拡張子を変更したり、名前の一部をまとめて変更したい場合があります。 Rename-Item コマンドレット単体では複数ファイルを一度に変更する機能はありませんが、 Get-ChildItem と組み合わせることで実現できます。
例として、拡張子が .ps1 のファイルの拡張子を .html に変更してみます。
最初に対象となる複数のファイルを Get-ChildItem を使って取得します。
Get-ChildItem c:\code\powershell\*.ps1
パイプを使って Rename-Item へ渡します。(新しい名前をまだ設定していません)。
Get-ChildItem c:\code\powershell\*.ps1 | Rename-Item
変更する名前にはスクリプトブロック( { } で囲んだ処理)を使って、変更前の名前の中の .ps1 を .html に置き換えます。
Get-ChildItem c:\code\powershell\*.ps1 | Rename-Item -NewName {$_.Name -replace '.ps1','.html'}
※ $_ は特殊な変数で、パイプラインで渡されている現在のオブジェクト(今回の場合はファイル)が格納されています。 Name プロパティを参照すると変更前のファイル名を取得できます。新しい名前として、変更前の名前に対して replace 演算子を使って拡張子を変更したものを新しい名前として設定しています。
それでは、実際に試してみます。変更前に c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
次のように実行します。
Get-ChildItem c:\code\powershell\*.ps1 | Rename-Item -NewName {$_.Name -replace '.ps1','.html'}
画面上には何も表示されません(正常に名前の変更が行われています)。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定した条件に一致する複数のファイルの拡張子をまとめて変更することができました。
サブディレクトリの中のファイルもまとめて変更する
なお対象となる複数のファイルを Get-ChildItem を使って取得するときに、 -Recurse オプションを使用することで、対象のディレクトリの中にあるサブディレクトリの中に、条件に一致するファイルがあった場合もいっしょに変更することができます。
Get-ChildItem c:\code\powershell\*.ps1 -Recurse | Rename-Item -NewName {$_.Name -replace '.ps1','.html'}
-- --
PowerShell における Rename-Item コマンドレットの使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。