PowerShellで重複ファイルを検索・削除する方法

大量のファイルを扱う業務や、長年使っているパソコンでは、同じ内容のファイルが複数存在してしまう「重複ファイル問題」がよく発生します。手動で1つ1つ確認するのは大変で、時間も手間もかかります。この記事では、PowerShellを使って重複ファイルを検索・削除する方法をわかりやすく説明します。コマンドライン操作に慣れていない場合でも、使いやすい重複ファイルファインダーを使用できます。

ひとみ

更新者: ひとみ / 2025年07月29日

この記事を共有: instagram reddit

PowerShellとは

PowerShellは、Microsoftが作った高度なコマンドラインシェルとスクリプト言語で、Windowsの管理や自動化を効率的に行うためのツールです。 従来のコマンドプロンプトよりも遥かに柔軟で強力であり、Windowsの設定変更、ファイル操作、サービス制御、レジストリ操作などをスクリプトで管理できます。

PowerShellは、システム管理者だけでなく、日常的にWindowsを使う中上級ユーザーにも役立ちます。 特に大量のファイルやフォルダを扱う際、繰り返し作業やルールに基づく操作(例:重複ファイルの検出・削除など)を手動で行うのは大変ですが、PowerShellを使うことで数行のスクリプトで一括処理が可能になります。

PowerShellで重複ファイルを検索する基本スクリプト

PowerShellを使って重複ファイルを削除するには、まず重複ファイルを検索し、その後削除する必要があります。検索には、ファイルのハッシュ値やサイズを比較する方法が一般的です。削除は、Remove-Itemコマンドレットを使用します。

重複ファイルを検索するには、いくつかの方法があります。

1. ファイル名とサイズで検索

同じ名前で同じサイズを持つファイルを重複とみなす方法です。この方法は簡単ですが、ファイル名やサイズが異なる場合でも内容が同じファイルを見つけることができません。

2. ハッシュ値で検索

ファイルの内容をハッシュ化し、ハッシュ値が一致するファイルを重複とみなす方法です。この方法は、ファイル名やサイズが異なる場合でも内容が同じファイルを検出できますが、処理に時間がかかる場合があります。

例(ファイル名とサイズで検索)
$targetFolder = "C:\対象フォルダ" # 検索対象のフォルダを指定
$duplicates = @{}
Get-ChildItem -Path $targetFolder -File | ForEach-Object {
 $key = $_.Length.ToString() + $_.Name # サイズと名前をキーとする
 if ($duplicates.ContainsKey($key)) {
  $duplicates[$key] += $_
 } else {
  $duplicates[$key] = @($_)
 }
}
$duplicates.GetEnumerator() | Where-Object {$_.Value.Count -gt 1} | ForEach-Object {
 Write-Host "重複ファイルグループ:" $_.Key
 $_.Value | ForEach-Object {
  Write-Host "`t" $_.FullName
 }
}
例(ハッシュ値で検索)
$targetFolder = "C:\対象フォルダ" # 検索対象のフォルダを指定
$hashes = @{}
Get-ChildItem -Path $targetForest -File | ForEach-Object {
 $hash = Get-FileHash $_.FullName -Algorithm SHA256 | Select-Object -ExpandProperty Hash
 if ($hashes.ContainsKey($hash)) {
  $hashes[$hash] += $_
} else {
  $hashes[$hash] = @($_)
 }
}
$hashes.GetEnumerator() | Where-Object {$_.Value.Count -gt 1} | ForEach-Object {
 Write-Host "重複ファイルグループ:" $_.Key
 $_.Value | ForEach-Object {
  Write-Host "`t" $_.FullName
 }
}

PowerShellで重複ファイルを自動削除するスクリプト例

検索結果に基づいて、削除したいファイルを特定し、Remove-Itemコマンドレットで削除します。

例(ハッシュ値で検索した結果から、2つ目以降のファイルを削除)
$targetFolder = "C:\対象フォルダ" # 検索対象のフォルダを指定 $hashes = @{}
Get-ChildItem -Path $targetFolder -File | ForEach-Object {
 $hash = Get-FileHash $_.FullName -Algorithm SHA256 | Select-Object -ExpandProperty Hash
 if ($hashes.ContainsKey($hash)) {
  $hashes[$hash] += $_
 } else {
  $hashes[$hash] = @($_)
 }
}
$hashes.GetEnumerator() | Where-Object {$_.Value.Count -gt 1} | ForEach-Object {
 $files = $_.Value
 for ($i = 1; $i -lt $files.Count; $i++) {
  Write-Host "削除:" $files[$i].FullName
  Remove-Item $files[$i].FullName -Force # -Forceオプションで確認なしで削除
 }
}
⚠️注意
  • Remove-Itemコマンドレットの`-Force`オプションは、削除の確認をスキップします。誤って必要なファイルを削除しないように、注意して使用してください。

  • 削除前に、必ずバックアップを取ることをお勧めします。

  • 上記は基本的なスクリプトです。実際の環境に合わせて、ファイル名やハッシュ値の比較方法、削除対象のファイルの選択方法などを調整してください。

その他
重複ファイルの検索と削除をGUIで行いたい場合は、重複ファイル検索ソフトを利用できます。
Windows 10以降では、ストレージセンサーという機能でディスク領域を自動的に解放することができます。この機能は、不要なファイルを削除したり、一時ファイルを削除したりすることで、ディスク領域を解放します。

Partition Assistant for CleanupでGUIベースの安全削除を併用する

スクリプトでの操作に不安がある方や、もっと直感的に重複をチェックしたい方には、Partition Assistant for Cleanupの「重複ファイル検索」機能がぴったりです。

▶ スクリプトに不安がある人向けの安心操作
ワンクリックでフォルダ・ドライブ全体をスキャン
サイズやハッシュ一致のファイルを一括抽出
削除候補のプレビュー・選択が可能

操作がすべてGUIベースなので、コマンドミスや誤操作の心配が一切ありません。

加えて、このツールには他にもディスクの不要ファイル削除機能や大容量ファイル検索などの便利な機能が搭載されており、パソコン最適化を実現できます。

無料ダウンロードWindows 11/10/8/7/Server
安全かつ快適

ステップ 1. Partition Assistant for Cleanupをダウンロード、インストールして起動します。「重複ファイルの検索」タブをクリックします。「スキャン開始」をクリックしてシステムドライブのスキャンを開始するか、「カスタムスキャン」をクリックしてスキャンするパスを手動で選択できます(ここでは「カスタムスキャン」を例に説明します)。

カスタムスキャン

ステップ 2. 「カスタムスキャン」をクリックすると、PC上のすべてのローカルドライブと外付けドライブが表示されます。「パスを追加」ボタンをクリックすると、フォルダ参照ウィンドウがポップアップ表示されます。デスクトップ、ダウンロードフォルダ、その他のフォルダパスなど、PC上のパスを追加できます。

パスを追加

ステップ 3. 必要なパスを追加したら、「スキャン開始」ボタンをクリックしてスキャン処理を開始します。

スキャン開始

ステップ 4. スキャン処理には時間がかかる場合があります。スキャンが完了すると、すべての重複ファイルがリストされます。重複ファイルを手動で選択するか、「スマート選択」ボタンをクリックして不要な重複ファイルを自動的に選択して削除できます。

ヒント:「スマート選択」にチェックが入っている場合、最も古い重複ファイルのみのチェックが外されます。つまり、最も古いファイルを除くすべての重複ファイルが削除対象としてチェックされます。(最も古いファイルとは、最初に作成されたファイルです。このファイルは削除されません。その他の重複ファイルは、最も古いファイルのコピーとみなされます。)

スマート選択

後ろのボタンをクリックして、それらのファイルの中身を確認できます。

重複ファイルを特定

すべての重複ファイルを手動で選択した場合、重複ファイルの少なくとも1つのコピーを残すように求めるポップアップ警告ウィンドウが表示されます。すべての重複ファイルを削除する場合は、「OK」をクリックすると、すべての重複ファイルが削除対象として選択されます。

警告ウィンドウ

ステップ 5. 不要な重複ファイルを選択したら、「今すぐ削除」ボタンをクリックして削除を開始します。

今すぐ削除

ステップ 6. 削除には時間がかかる場合があります。処理が完了すると、選択したファイルが削除され、削除されたデータの合計量を示す「クリーンアップ完了」ウィンドウが表示されます。

クリーンアップ完了

まとめ

PowerShellは、Windows環境でのファイル管理や自動化において非常に強力なツールであり、重複ファイルの検索や削除にも役立ちます。特にスクリプトを使用することで、目視では見つけにくい重複ファイルを正確に検出・処理できますが、操作ミスによるファイルの誤削除のリスクもあります。

そのため、PowerShellの優れた検出機能と、Partition Assistant for CleanupのようなGUIツールによる直感的な削除操作を組み合わせることで、安全かつ効率的に重複ファイルを整理できます。手軽さと正確性を両立させた方法として、特に多くのファイルを管理するユーザーにとって非常に有効な選択肢となるでしょう。

ひとみ
ひとみ · 編集者
ひとみは、パソコンに関わるヘルプドキュメント、基礎知識、リソースなどを書いています。そのほか、バックアップ&復元、クローン、ディスク&パーティションの管理などの記事もたくさん持っています。分かりやすく、手順が追いやすい文章を心がけ、ユーザーがトラブルをスムーズに解決できるように工夫しています。専門用語を適切に解説し、異なる知識レベルの読者にも理解しやすい文章を心がけています。信頼性の高い情報を見極め、最新のトレンドやテクノロジー動向にも常に注意を払っています。