【PowerShell】指定フォルダ内の特定拡張子ファイルを一括削除する方法

【PowerShell】指定フォルダ内の特定拡張子ファイルを一括削除する方法 PowerShell

不要なファイルを整理する際、特定の拡張子を持つファイルを一括で削除したい場面は少なくありません。PowerShellを使えば、対象のフォルダ内にある特定の拡張子のファイルを効率よく削除できます。ここではその基本的な方法と応用例を紹介します。

PowerShellで特定拡張子のファイルを削除する基本構文

まずは、対象の拡張子を指定してファイルを削除する最もシンプルな方法から確認しましょう。

Remove-Item "C:\example\*.tmp"

このコマンドは、C:\example\ フォルダ内の .tmp 拡張子を持つファイルをすべて削除します。なお、サブフォルダ内のファイルは含まれません。

サブフォルダも含めて削除するには

サブディレクトリ内のファイルも含めて削除するには、-Recurse パラメータを追加します。

Get-ChildItem "C:\example" -Recurse -Filter *.log | Remove-Item

このコマンドは、C:\example 以下すべてのフォルダにある .log ファイルを対象に削除を実行します。

削除前に確認する方法(確認付き削除)

誤って重要なファイルを削除しないよう、確認を入れるオプションもあります。

Get-ChildItem "C:\example" -Recurse -Filter *.bak | ForEach-Object {
    $confirm = Read-Host "削除しますか? $_ (y/n)"
    if ($confirm -eq 'y') {
        Remove-Item $_
    }
}

このスクリプトでは、各ファイルごとに削除してよいかを確認することができます。

複数の拡張子を対象にするには

複数の拡張子(たとえば .tmp と .bak)を同時に削除するには、配列とフィルターを組み合わせます。

$extensions = @("*.tmp", "*.bak")
foreach ($ext in $extensions) {
    Get-ChildItem "C:\example" -Recurse -Filter $ext | Remove-Item
}

削除ログをファイルに残す

削除したファイルの情報をログとして記録する場合は、以下のようにします。

$logPath = "C:\log\deleted_files.txt"
$targetPath = "C:\example"
$ext = "*.log"

Get-ChildItem $targetPath -Recurse -Filter $ext | ForEach-Object {
    $_.FullName | Out-File -FilePath $logPath -Append
    Remove-Item $_
}

このスクリプトは、削除したファイルのパスをテキストファイルに記録してから削除を行います。

注意点

  • 誤削除を防ぐため、必ず削除前にテスト実行(-WhatIfパラメータの活用)やバックアップを行ってください。
  • Remove-Item の使用には十分な権限が必要です。実行前にPowerShellを管理者として起動することをおすすめします。