PowerShellで重複するファイルを探すスクリプト

コンピュータ
PowerShellでファイルのハッシュ値を取得するコマンドレット(Get-FileHash)が存在することを知りましたので、ストレージ内で重複するファイルを探すスクリプトを作ってみました。

ハッシュ値とファイル名を1行で出力し、重複ファイルの可能性が高い同じハッシュ値のファイルが連続して出力するようにしてあります。

スクリプト

#
# 重複するファイルを探すスクリプト
#
# ファイル名:Search-DuplicateFile.ps1


# 連想配列の初期化
$array = @{}

#
Get-ChildItem E:\roms -File -Recurse | Get-FileHash -Algorithm MD5 | % {
    if ($array.ContainsKey($_.Hash)) {
        # 既存
    } else {
        # 要素の追加
        $d = $array.Add($_.Hash, (New-Object System.Collections.ArrayList))
    }
    $d = $array[$_.Hash].Add($_.Path)
}
$array.GetEnumerator() | ? {
    $_.Value.Count -gt 1
} | % {
    $hash = $_.Name
    $files = $_.Value
    $files | % {
        $path = $_
        echo "${hash} ${path}"
    }
    echo "--- 区切り ---"
}

結果

F0FF84B7717BDDCCF8E7C62AE07F51F7 E:\share\001.txt
F0FF84B7717BDDCCF8E7C62AE07F51F7 E:\share\001.txt.bak
--- 区切り ---
8718AF9EEF7E8F9E495EF1B9CF25F3E9 E:\share\coin.zip
8718AF9EEF7E8F9E495EF1B9CF25F3E9 E:\backup\share\coin.zip
--- 区切り ---

コメント