Windowsでのシステム管理や自動化作業において、ファイルやフォルダの操作は最も頻繁に行われるタスクの一つです。
PowerShellでこれを行うための中心的なコマンドレットがRemove-Itemです。
従来のコマンドプロンプトで利用されていたdelやrdコマンドよりも柔軟性が高く、詳細な条件指定による一括削除や安全な削除操作が可能です。
本記事では、2026年現在の最新のベストプラクティスに基づき、Remove-Itemコマンドレットの基本的な使い方から、実務で役立つ応用テクニックまでを体系的に解説します。
誤って重要なデータを削除しないための安全策についても触れていくため、初心者から中級者の方まで幅広く役立てていただける内容となっています。
Remove-Itemの基本概念と構文
PowerShellのRemove-Itemは、ファイル、フォルダ(ディレクトリ)、さらにはレジストリキーや変数など、PowerShellドライブ上の「項目」を削除するための汎用的なコマンドです。
まず、最も基本的な構文を確認しましょう。
# 基本的な構文
Remove-Item -Path "ファイルのパス"
エイリアス(短縮名)について
PowerShellでは、他のシェルに慣れたユーザーのために複数のエイリアスが用意されています。
以下のコマンドはすべてRemove-Itemと同じ動作をします。
del(コマンドプロンプト由来)erase(コマンドプロンプト由来)rm(UNIX/Linux由来)ri(PowerShell独自の短縮形)
日常的な手動操作ではこれらを使っても問題ありませんが、再利用するスクリプトを記述する場合は、可読性と保守性を高めるために正式名称である Remove-Item を使用することを強く推奨します。
ファイルを削除する基本的な方法
特定のファイルを1つだけ削除する場合、引数にパスを指定するだけで完了します。
# カレントディレクトリにある test.txt を削除する
Remove-Item -Path ".\test.txt"
このコマンドを実行しても、成功した場合には特に画面にメッセージは表示されません。
もし削除されたことを確認したい場合は、-Verboseパラメータを付与します。
# 詳細情報を表示しながら削除
Remove-Item -Path ".\test.txt" -Verbose
詳細: 対象 "C:\temp\test.txt" に対して操作 "ファイルの削除" を実行しています。
フォルダ(ディレクトリ)を削除する方法
フォルダを削除する場合、そのフォルダが空であるか、中にファイルが含まれているかによって挙動が異なります。
空のフォルダを削除する
中身が何もない空のフォルダを削除する場合は、ファイルと同じ手順で削除可能です。
# 空のフォルダを削除
Remove-Item -Path ".\EmptyFolder"
中身のあるフォルダを強制的に削除する(-Recurse)
フォルダの中にファイルやサブフォルダが存在する場合、単純に実行するとPowerShellは「項目には子が含まれており、Recurse パラメータが指定されていません」という確認プロンプトを表示します。
中身ごとすべて削除するには、-Recurse パラメータを使用します。
# フォルダとその中身をすべて削除
Remove-Item -Path ".\TargetFolder" -Recurse
これにより、指定したフォルダをルートとして、その配下にあるすべてのコンテンツが再帰的に削除されます。
強制削除と読み取り専用ファイルの扱い(-Force)
Windowsの設定で「読み取り専用」属性が付与されているファイルや、隠しファイルなどは、通常のRemove-Itemではエラーになり削除できません。
このような場合には、-Force パラメータを組み合わせる必要があります。
# 読み取り専用ファイルや隠しファイルを強制的に削除する
Remove-Item -Path ".\readonly.txt" -Force
注意点として、-Force を使用しても、他のプログラムが使用中でロックされているファイルは削除できません。 その場合は、対象のプロセスを終了させてから実行する必要があります。
複数の項目を一括で削除するテクニック
実務では、特定の拡張子を持つファイルだけを消したり、特定の名前パターンに合致するものだけを消したりする「一括削除」のニーズが多くあります。
ワイルドカードによる指定
アスタリスク(\*)を使用することで、パターンマッチングによる削除が可能です。
# すべてのログファイルを一括削除
Remove-Item -Path "C:\Logs\*.log"
特定の条件を除外して削除する(-Exclude)
「特定のファイル以外をすべて消したい」という場合には、-Excludeパラメータが便利です。
# .exe ファイル以外をすべて削除
Remove-Item -Path "C:\temp\*" -Exclude "*.exe"
逆に、特定の条件に一致するものだけを含める場合は-Includeを使用しますが、これを利用する際はパスの指定方法に注意が必要です。
通常、-Include はパスの末尾が \* である場合にのみ正しく機能します。
安全に削除を行うための「確認」機能
PowerShellでのファイル削除は、ごみ箱を経由せずに直接削除されるため、一度実行すると元に戻すことが困難です。
実行前に影響範囲を確認するための機能が2つ用意されています。
実行前にシミュレーションする(-WhatIf)
-WhatIfパラメータを付けると、実際の削除は行わずに「実行された場合に何が起こるか」を表示します。
# 削除のシミュレーションを実行
Remove-Item -Path "C:\Data\*" -Recurse -WhatIf
WhatIf: 対象 "C:\Data\old_backup.zip" に対して操作 "ファイルの削除" を実行しています。
WhatIf: 対象 "C:\Data\temp_folder" に対して操作 "ディレクトリの削除" を実行しています。
スクリプトを作成した際や、複雑なワイルドカードを指定する場合は、まずこの -WhatIf で対象が正しいか確認する癖をつけることを強く推奨します。
削除のたびに確認を求める(-Confirm)
実行時に1つずつ確認メッセージを出したい場合は、-Confirmパラメータを使用します。
Remove-Item -Path ".\important.docx" -Confirm
実行すると、以下のような選択肢が表示されます。
確認
この操作を実行しますか?
対象 "C:\temp\important.docx" に対して操作 "ファイルの削除" を実行しています。
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"):
パイプラインを活用した高度な削除操作
PowerShellの真骨頂は、他のコマンドレットの結果をパイプライン(|)で受け取って処理することです。
これにより、「30日以上前のファイルだけを削除する」といった複雑な条件指定が可能になります。
条件に合致するファイルを抽出して削除する
例えば、一時フォルダ内の古いファイルを整理するシナリオを考えてみましょう。
# 最終更新日時が30日以上前のファイルを抽出して削除
$limitDate = (Get-Date).AddDays(-30)
Get-ChildItem -Path "C:\Temp" -File |
Where-Object { $_.LastWriteTime -lt $limitDate } |
Remove-Item -Verbose
この処理の流れは以下の通りです。
| ステップ | コマンドレット | 役割 |
|---|---|---|
| 1 | Get-ChildItem | ファイルの一覧を取得する |
| 2 | Where-Object | 最終更新日が30日前より古いものだけに絞り込む |
| 3 | Remove-Item | 絞り込まれた項目を削除する |
サイズの大きいファイルだけを削除する
ディスク容量を確保するために、特定のサイズ(例:100MB)以上のファイルだけを削除する例です。
# 100MB以上のファイルを検索して削除
Get-ChildItem -Path "C:\Downloads" -Recurse -File |
Where-Object { $_.Length -gt 100MB } |
Remove-Item -Confirm
特殊なケース:特殊文字を含むパスの削除
ファイル名にブラケット([ や ])が含まれている場合、通常の-Path指定ではワイルドカードとして解釈されてしまい、エラーになることがあります。
このような場合は、-LiteralPathパラメータを使用します。
# [2026]Report.pdf のようなファイルを正確に指定して削除
Remove-Item -LiteralPath "C:\Data\[2026]Report.pdf"
-LiteralPathを使用すると、指定した文字列が「そのまま」パスとして扱われるため、意図しない解釈を防ぐことができます。
エラーハンドリングと自動化
スクリプトの中でRemove-Itemを使用する場合、対象のファイルが存在しなくてもエラーを出さずに進めたいことがあります。
その場合は、-ErrorActionパラメータが役立ちます。
# ファイルが存在しなくてもエラーを表示せずに続行する
Remove-Item -Path "C:\temp\not_exist.txt" -ErrorAction SilentlyContinue
また、削除に失敗した際(他のプロセスが使用中など)にログを記録したい場合は、try-catchブロックを使用します。
try {
# 削除を試行
Remove-Item -Path "C:\LockedFile.log" -ErrorAction Stop
Write-Host "削除成功" -ForegroundColor Green
}
catch {
# エラー時の処理
Write-Warning "削除に失敗しました: $($_.Exception.Message)"
}
まとめ
PowerShellのRemove-Itemは、単なる削除コマンドを超えた非常に強力なツールです。
- 基本は -Path 指定で簡単に削除可能。
- フォルダ削除には -Recurse、読み取り専用には -Force。
- 安全性確保のために -WhatIf を活用する。
- パイプラインを組み合わせることで、日付やサイズなどの詳細な条件による一括クリーンアップが可能。
これらの機能を正しく理解して使い分けることで、Windows環境のメンテナンス効率は劇的に向上します。
特に自動化スクリプトを作成する際は、今回紹介した-LiteralPathやエラーハンドリングの手法を取り入れ、堅牢で安全な運用を目指してください。
ファイル操作はシステムに大きな影響を与えるため、まずはテスト環境や-WhatIfを活用したシミュレーションから始めることをお勧めします。
