Remove-Itemの使い方:ファイルやディレクトリを削除する
Remove-Item コマンドレットを使用すると、指定したファイルやディレクトリを削除できます。条件に一致するファイルやディレクトリだけを削除したり、ディレクトリに含まれるファイルやサブディレクトリごと削除することもできます。ここでは PowerShell における Remove-Item コマンドレットの使い方について解説します。
Remove-Itemコマンドレットの書式
Remove-Item コマンドレットは、指定したファイルやディレクトリを削除するためのコマンドレットです。 Remove-Item コマンドレットの書式は次の通りです。
Remove-Item [-Path] <String[]> [-Filter <String>] [-Include <String[]>] [-Exclude <String[]>] [-Recurse] [-Force] [-Credential <PSCredential>] [-WhatIf] [-Confirm] [-Stream <String[]>] [<CommonParameters>]
Remove-Item はエイリアスとして del、 erase、 rd 、 rm、 rmdirが定義されています。
del -> Remove-Item erase -> Remove-Item rd -> Remove-Item ri -> Remove-Item rm -> Remove-Item rmdir -> Remove-Item
ファイルを削除するには次の書式を使用します。
Remove-Item -Path 削除するファイルのパス
-Path オプションは省略可能なので、通常は次のように実行します。
Remove-Item 削除するファイルのパス
それではファイル c:\code\powershell\sample.txt を削除してみます。削除前に c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
次のように実行します。
Remove-Item c:\code\powershell\sample.txt
画面上には何も表示されません(正常に削除されています)。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したファイルが削除されたことが確認できました。
※ Remove-Item で削除したファイルは、 Winddows 環境であればいったんごみ箱に入りますが、ゴミ箱を経由せずに完全に削除される場合があります。誤って重要なファイルを削除しないよう注意してください。
ディレクトリを削除する
ファイルだけでなくディレクトリも削除できます。空のディレクトリはそのまま削除できますが、ディレクトリの中にファイルやサブディレクトリが含まれている場合は、-Recurse オプションが指定されていないと確認メッセージが表示されます。
それでは最初に空のディレクトリ c:\code\powershell\back を削除してみます。削除前に c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
次のように実行します。
Remove-Item c:\code\powershell\back
画面上には何も表示されません(正常に削除されています)。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したディレクトリが削除されたことが確認できました。
続いて空ではないディレクトリ c:\code\powershell\doc を削除してみます。次のように実行します。
Remove-Item c:\code\powershell\doc
空ではないディレクトリを削除しようとすると、次のようなメッセージが表示されます。
PS C:\code\powershell> Remove-Item c:\code\powershell\doc Confirm The item at C:\code\powershell\doc has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
削除しようとしているディレクトリが空ではないこと、また -Recurse オプションが指定されていないことから削除していいかどうかの確認が行われます。削除してよければ Y 、削除しない場合は N を押してください。そのあとで Enter キーを押してください。
今回はディレクトリを削除します。 Y を押したあと Enter キーを押しました。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したディレクトリが削除されたことが確認できました。
-Recurseオプション
-Recurse オプションを指定すると、ディレクトリの中に含まれるファイルやサブディレクトリも含めてすべて削除されます。この場合、確認メッセージは表示されず、すぐに削除が実行されます。
Remove-Item 削除するファイルのパス -Recurse
それでは空ではないディレクトリ c:\code\powershell\doc を削除してみます。次のように実行します。
Remove-Item c:\code\powershell\doc -Recurse
今回は確認のメッセージなどは表示されませんでした。ディレクトリは正常に削除されています。
c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したディレクトリが削除されたことが確認できました。
このように -Recurse オプションを指定することで、確認なしで空ではないディレクトリを削除することができます。
非表示や読み取り専用のファイルを削除する
Remove-Item では、読み取り専用ファイル、システムファイル、非表示ファイルについては、そのままでは削除できない場合があります。
実際に試してみます。 c:\code\powershell\sample.txt ファイルについて、読み取り専用に設定しました。(属性に r が付いているファイルは読み取り専用です)。
それでは読み取り専用のファイル c:\code\powershell\sample.txt を削除してみます。次のように実行します。
Remove-Item c:\code\powershell\sample.txt
すると次のようなエラーメッセージが表示されました。
PS C:\code\powershell> Remove-Item c:\code\powershell\sample.txt Remove-Item: You do not have sufficient access rights to perform this operati on or the item is hidden, system, or read only.
このように、読み取り専用ファイルや非表示ファイルなどは、そのままでは削除できない場合があります。
-Forceオプション
読み取り専用ファイルやシステムファイル、非表示ファイルを削除するには、-Force オプションを指定します。
Remove-Item 削除するファイルのパス -Force
先ほどと同じファイルを -Force オプションを付けて削除します。
Remove-Item c:\code\powershell\sample.txt -Force
画面上には何も表示されません(正常に削除されています)。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定した読み取り専用のファイルが削除されたことが確認できました。
※ -Force オプションを使用すると、通常は削除できないファイルも強制的に削除されます。重要なファイルを誤って削除しないよう注意してください。
ディレクトリの内容をすべて削除する
単一のファイルではなく、ディレクトリ内に含まれるファイルやサブディレクトリをまとめて削除するには、次のように指定します。
Remove-Item 削除するファイルなどが含まれるディレクトリ\*
※ パスの最後に \* を付けた場合は、ディレクトリ自体は削除されず、その中に含まれるファイルやサブディレクトリのみが削除されます。
ファイルや空のディレクトリはそのまま削除できますが、ディレクトリの中にファイルやサブディレクトリが含まれている場合は、-Recurse オプションが指定されていないと確認メッセージが表示されます。
それでは c:\code\powershell ディレクトリにあるファイルやサブディレクトリを削除してみます。削除前に c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
次のように実行します。
Remove-Item c:\code\powershell\*
対象のディレクトリには、空ではないディレクトリが含まれていたので、削除しようとすると次のようなメッセージが表示されます。
PS C:\code\powershell> Remove-Item c:\code\powershell\* Confirm The item at C:\code\powershell\doc has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
ディレクトリの中にファイルやサブディレクトリが含まれており、-Recurse オプションが指定されていないため、削除してよいかの確認が表示されます。削除してよければ Y 、削除しない場合は N を押してください。そのあとで Enter キーを押してください。
今回は他の同じようなディレクトリもまとめて削除するため、A(Yes to All)を押したあと Enter キーを押しました。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したディレクトリに含まれていたファイルやサブディレクトリがすべて削除されました。
-Recurseオプション
-Recurse オプションを指定すると、空ではないサブディレクトリが含まれていた場合でも、確認メッセージは表示されず、すぐに削除が実行されます。
Remove-Item 削除するファイルなどが含まれるディレクトリ\* -Recurse
それでは c:\code\powershell ディレクトリにあるファイルやサブディレクトリを削除してみます。(先ほど削除したファイルやディレクトリは戻してあります)。次のように実行します。
Remove-Item c:\code\powershell\* -Recurse
今回は確認のメッセージなどは表示されませんでした。ディレクトリは正常に削除されています。
c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したディレクトリに含まれていたファイルやサブディレクトリがすべて削除されました。
このように -Recurse オプションを指定することで、確認なしで空ではないディレクトリを削除することができます。
条件に一致するファイルやディレクトリを削除する
Remove-Item では特定の条件を満たすファイルやディレクトリだけを削除することができます。
-Includeオプション
-Include オプションを使用すると、条件に一致するファイルやディレクトリだけを削除することができます。
Remove-Item 削除するファイルなどが含まれるディレクトリ\* -Include パターン
パターンには任意の長さの文字に一致する * と任意の 1 文字とマッチする ? を使用できます。例えば拡張子が .txt のファイルだけを削除したい場合は、パターンに *.txt と指定してください。
Remove-Item 削除するファイルなどが含まれるディレクトリ\* -Include *.txt
パターンは複数指定することもできます。複数指定する場合は、カンマ(,)で区切って続けて記述します。複数指定した場合はいずれかのパターンと一致するファイルやディレクトリを削除します。
Remove-Item 削除するファイルなどが含まれるディレクトリ\* -Include *.png,*.jpg
それでは c:\code\powershell ディレクトリにある拡張子が *.ps1 のファイルしてみます。削除前に c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
次のように実行します。
Remove-Item c:\code\powershell\* -Include *.ps1
画面上には何も表示されません(正常に削除されています)。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したパターンと一致するファイルが削除されたことが確認できました。なお今回の場合は対象のディレクトリの中のサブディレクトリの中にあるファイルは削除されませんでした。
-Filterオプション
-Filter オプションを使用すると、条件に一致するファイルやディレクトリだけを削除することができます。
Remove-Item 削除するファイルなどが含まれるディレクトリ\* -Filter パターン
パターンには任意の長さの文字に一致する * と任意の 1 文字とマッチする ? を使用できます。例えば拡張子が .txt のファイルだけを削除したい場合は、パターンに *.txt と指定してください。
Remove-Item 削除するファイルなどが含まれるディレクトリ\* -Filter *.txt
-Include と似ていますが、 -Filter はファイルシステム側で絞り込みを行うため、より高速に処理されます。
ただし -Include と異なり、 -Filter ではパターンを複数指定することができません。
それでは c:\code\powershell ディレクトリにある拡張子が *.ps1 のファイルを削除してみます。削除前に c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
次のように実行します。
Remove-Item c:\code\powershell\* -Filter *.ps1
画面上には何も表示されません(正常に削除されています)。
あらためて c:\code\powershell ディレクトリの内容を確認します。
Get-ChildItem c:\code\powershell
指定したパターンと一致するファイルが削除されたことが確認できました。なお今回の場合は対象のディレクトリの中のサブディレクトリの中にあるファイルは削除されませんでした。
サブディレクトリの中も含めて削除する
-Include オプションの場合も、 -Filter オプションの場合も、サブディレクトリの中にパターンと一致するファイルがあっても削除されませんでした。サブディレクトリの中も含めて削除を行う場合は -Recurse を合わせて使用してください。
Remove-Item 削除するファイルなどが含まれるディレクトリ\* -Include パターン -Recurse
それでは c:\code\powershell ディレクトリにある拡張子が *.ps1 のファイルしてみます。削除前に c:\code\powershell ディレクトリの内容をサブディレクトリの中まで含めて確認します。
Get-ChildItem c:\code\powershell -Recurse
次のように実行します。
Remove-Item c:\code\powershell\* -Include *.ps1 -Recurse
画面上には何も表示されません(正常に削除されています)。
あらためて c:\code\powershell ディレクトリの内容をサブディレクトリの中まで含めて確認します。
Get-ChildItem c:\code\powershell -Recurse
-Recurse オプションを合わせて使用することで、サブディレクトリの中にあるパターンと一致するファイルも削除することができました。
なお -Filter オプションと -Recurse を組み合わせた場合、指定方法によっては意図した通りに絞り込みが行われないことがあります。
そのため、-Filter と -Recurse を併用する場合は、次のように Get-ChildItem コマンドレットで対象のファイルを取得し、パイプで Remove-Item に渡して削除する方法が確実です。
Get-ChildItem c:\code\powershell -Recurse -Filter *.ps1 | Remove-Item
この場合は、サブディレクトリまで含めてパターンと一致するファイルを削除することができました。
-- --
PowerShell における Remove-Item コマンドレットの使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。