PowerShellでWindows PC上の重複ファイルを検索し、確認した後に削除する方法

この記事では、PowerShellを使ってWindows PC上で重複ファイルを検索し、確認した後に削除する方法を紹介します。スクリプトは検索と削除用に分けられており、削除対象のファイルを確認できます。また、重複ファイルの中で更新日が最も古いファイルが残されます。

目次

重複ファイルの検索スクリプト

以下のスクリプトは、指定したディレクトリ内の重複ファイルを検索し、そのパスを表示します。「検索対象のディレクトリ」の箇所に検索対象のディレクトリを入れればそのまま利用できます。

$directory = "検索対象のディレクトリ"

function Get-FileHashValue {
    param([string]$filePath)
    $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
    $hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($filePath)))
    return $hash.Replace("-", "")
}

# 重複ファイルを検索
$files = Get-ChildItem -Path $directory -File -Recurse
$hashTable = @{}

foreach ($file in $files) {
    $hashValue = Get-FileHashValue -filePath $file.FullName
    if ($hashTable.ContainsKey($hashValue)) {
        $hashTable[$hashValue] += $file
    } else {
        $hashTable[$hashValue] = @($file)
    }
}

# 重複ファイルのパスを表示
foreach ($hashValue in $hashTable.Keys) {
    $duplicates = $hashTable[$hashValue]
    if ($duplicates.Count -gt 1) {
        Write-Host "重複ファイルが見つかりました:"
        foreach ($duplicate in $duplicates) {
            Write-Host $duplicate.FullName
        }
    }
}
実行すると表示される内容

重複ファイルが見つかりました:
C:\Users\kanri\Documents\重複ファイル削除テスト\sample\パワークエリ\3. 表をつなげる\結合の種類完成.xlsx C:\Users\kanri\Documents\重複ファイル削除テスト\sample2\パワークエリ\3. 表をつなげる\結合の種類完成.xlsx
C:\Users\kanri\Documents\重複ファイル削除テスト\sample3\パワークエリ\3. 表をつなげる\結合の種類_完成.xlsx

重複ファイルの削除スクリプト

以下のスクリプトは、指定したディレクトリ内の重複ファイルを削除します。ただし、各重複グループの中で更新日が最も古いファイルが残されます。

$directory = "検索対象のディレクトリ"

# ファイルのハッシュ値を取得
function Get-FileHashValue {
    param([string]$filePath)
    $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
    $hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($filePath)))
    return $hash.Replace("-", "")
}

# 重複ファイルを検索
$files = Get-ChildItem -Path $directory -File -Recurse
$hashTable = @{}

foreach ($file in $files) {
    $hashValue = Get-FileHashValue -filePath $file.FullName
    if ($hashTable.ContainsKey($hashValue)) {
        $hashTable[$hashValue] += $file
    } else {
        $hashTable[$hashValue] = @($file)
    }
}

# 重複ファイルを削除
$deletedFilesCount = 0
foreach ($hashValue in $hashTable.Keys) {
    $duplicates = $hashTable[$hashValue]
    if ($duplicates.Count -gt 1) {
        # 更新日が最も古いファイルを残す
        $duplicates = $duplicates | Sort-Object LastWriteTime
        for ($i = 1; $i -lt $duplicates.Count; $i++) {
            Write-Host "重複ファイルを削除: $($duplicates[$i].FullName)"
            Remove-Item -Path $duplicates[$i].FullName
            $deletedFilesCount++
        }
    }
}

Write-Host "削除されたファイルの件数: $deletedFilesCount"
実行すると表示される内容

重複ファイルを削除: C:\Users\kanri\Documents\重複ファイル削除テスト\sample2\パワークエリ\1. データソース\CSVファイル\売上明細.tsv
重複ファイルを削除: C:\Users\kanri\Documents\重複ファイル削除テスト\sample3\パワークエリ\1. データソース\CSVファイル\売上明細.tsv
重複ファイルを削除: C:\Users\kanri\Documents\重複ファイル削除テスト\sample2\パワークエリ\1. データソース\Excelブック\3か月売上明細.xlsx 重複ファイルを削除: C:\Users\kanri\Documents\重複ファイル削除テスト\sample3\パワークエリ\1. データソース\Excelブック\3か月売上明細.xlsx
重複ファイルを削除: C:\Users\kanri\Documents\重複ファイル削除テスト\sample2\パワークエリ\3. 表をつなげる\売上実績と受注予測\売上実績.xlsx
重複ファイルを削除: C:\Users\kanri\Documents\重複ファイル削除テスト\sample3\パワークエリ\3. 表をつなげる\売上実績と受注予測\売上実績.xlsx
削除されたファイルの件数: 104

使い方

  1. まず、重複ファイルを検索するスクリプトを実行します。これにより、指定したディレクトリ内の重複ファイルのパスが表示されます。
  2. 表示された重複ファイルを確認し、削除しても問題ないことを確認します。
  3. 重複ファイルを削除するスクリプトを実行します。このスクリプトにより、重複ファイルが削除され、各重複グループの中で更新日が最も古いファイルが残されます。

注意: 重要なファイルが削除される恐れがあるため、スクリプトを実行する前に必ずバックアップを取ってください。また、削除対象のファイルを確認した上で、スクリプトを実行することを推奨します。

まとめ

この記事では、PowerShellを使ってWindows PC上で重複ファイルを検索し、確認した後に削除する方法を紹介しました。検索と削除用のスクリプトを分けることで、削除対象のファイルを確認できます。また、重複ファイルの中で更新日が最も古いファイルが残されます。

注意事項として、重要なファイルが削除される恐れがあるため、スクリプトを実行する前にバックアップを取ることが重要です。また、削除対象のファイルを確認した上で、スクリプトを実行することを推奨します。

これにより、ディスク容量の節約や整理が行えるため、PCのパフォーマンスが向上することが期待できます。是非、この方法を試してみてください。

コメント

コメントする

目次