PCやサーバーを長期間使用していると、意図せず同じ内容のファイルが複数保存されているケースが増えていきます。
特にドキュメント、画像、ログ、バックアップファイルなどは、フォルダを跨いで重複しやすく、ストレージを圧迫する原因になります。
本記事では、PowerShellを使用して確実に重複ファイルを検出する方法を解説します。
ファイル名だけに頼らず、内容が完全に同一であるかを判定する方法も含めて紹介しますので、ストレージ整理や定期的なメンテナンスにそのまま活用できます。

重複ファイルを正しく検出する考え方
重複ファイルの検出方法には、いくつかの段階があります。
・ファイル名が同じ
・ファイルサイズが同じ
・ファイルの内容が完全に一致している
ストレージ節約を目的とする場合、内容が完全に一致しているかどうかで判断する必要があります。
そのため、本記事では ハッシュ値(SHA256) を利用した方法を中心に解説します。
方法1:ファイル名だけで重複を確認する(簡易)
まずは、最も簡易的な方法です。
同じ名前のファイルが存在するかを確認します。
|
1 2 3 4 |
Get-ChildItem "C:\TargetFolder" -Recurse -File | Group-Object Name | Where-Object { $_.Count -gt 1 } | Select-Object Name, Count |
この方法は処理が高速ですが、以下の点に注意が必要です。
・中身が異なっても同名なら重複と判定される
・リネームされた同一ファイルは検出できない
そのため、参考情報として使う程度に留めるのが安全です。
方法2:ファイルサイズで重複候補を絞り込む
次に、ファイルサイズを利用する方法です。
|
1 2 3 4 |
Get-ChildItem "C:\TargetFolder" -Recurse -File | Group-Object Length | Where-Object { $_.Count -gt 1 } | Select-Object Name, Count |
この方法では、サイズが一致するファイルを抽出できます。
ただし、異なる内容でもサイズが同じケースは存在するため、最終判定には不十分です。
方法3:ハッシュ値で完全一致を判定する(推奨)
ストレージ節約を目的とする場合、最も安全なのが ハッシュ値による判定 です。
PowerShellには標準で Get-FileHash コマンドレットが用意されています。
基本的な重複検出スクリプト
|
1 2 3 4 |
Get-ChildItem "C:\TargetFolder" -Recurse -File | Get-FileHash -Algorithm SHA256 | Group-Object Hash | Where-Object { $_.Count -gt 1 } |
この結果に表示されるファイル群は、内容が完全に同一です。
ファイル名や保存場所が異なっていても、安心して重複と判断できます。
検出結果を分かりやすく表示する
実務では、どのファイルが重複しているのかを一覧で確認したいケースが多くあります。
|
1 2 3 4 5 6 7 |
Get-ChildItem "C:\TargetFolder" -Recurse -File | Get-FileHash -Algorithm SHA256 | Group-Object Hash | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group | Select-Object Path, Hash } |
これにより、完全に一致しているファイルのフルパスを確認できます。
CSVに出力して確認する
件数が多い場合は、CSV出力がおすすめです。
|
1 2 3 4 5 6 7 8 |
Get-ChildItem "C:\TargetFolder" -Recurse -File | Get-FileHash -Algorithm SHA256 | Group-Object Hash | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group | Select-Object Path, Hash } | Export-Csv "C:\duplicate_files.csv" -NoTypeInformation -Encoding UTF8 |
Excelで開けば、削除対象の選定も容易になります。
削除は自動化しない方が安全
重複ファイルの削除を自動化することも可能ですが、以下の理由から手動確認を推奨します。
・アプリケーションが参照している可能性
・最新ファイルとバックアップの区別
・システムファイル誤削除のリスク
PowerShellは「検出まで」に留め、削除は慎重に行うのが安全です。
大量ファイルを扱う際の注意点
・ネットワークドライブでは処理時間が大幅に増える
・ファイル数が多い場合、CPU使用率が一時的に上昇する
・実行中は他の重い処理を避ける
必要に応じて、対象フォルダを分割して実行してください。
よくある質問(Q & A)
- ファイルサイズが同じなら重複と判断して良いですか?
-
いいえ。サイズが同じでも内容が異なるファイルは存在します。
完全一致を確認するには、ハッシュ値による判定が必要です。 - MD5とSHA256はどちらを使うべきですか?
-
PowerShell標準ではSHA256が推奨されます。
重複検出用途ではSHA256で十分な精度があります。 - サブフォルダも含めて検出できますか?
-
はい。
-Recurseオプションを指定することで、すべてのサブフォルダが対象になります。 - 削除まで自動で行えますか?
-
技術的には可能ですが、誤削除のリスクが高いため推奨しません。
必ず事前確認を行ってください。
まとめ
PowerShellを使えば、追加ツールなしで重複ファイルを正確に検出できます。
特にハッシュ値を利用した方法は、安全かつ確実にストレージ節約を実現できます。
定期的なチェックを行うことで、不要なファイルの蓄積を防ぎ、
PCやサーバーの健全な運用につながります。
