使用 Powershell 删除重复文件

使用 Powershell 删除重复文件

Powershell 自 Windows Vista 以来一直是出厂默认设置。我有许多客户下载文件后,忘记了他们最终重新下载了同一个文件的位置。如果这些文件是重复的,则会附加一个编号。即...文件(1)文件(2),具体取决于他们重新下载文件的次数。

如何使用 powershell 删除这些重复项?

答案1

我不会依赖文件名,而是运行并存储每个文件的 MD5 和,并在检测到重复时删除它,这样就不会丢弃文件的较新版本。

https://stackoverflow.com/questions/10521061/how-to-get-a-md5-checksum-in-powershell

答案2

实现取决于您如何处理重复项。
在这里,我假设最后访问的副本对用户来说是最有价值的。为了便于管理,我将从选定副本的文件名中删除“( )”。我还没有实际测试过,所以请谨慎尝试。

    $files = gci c:\users\*\Downloads -include "* (*).*" -Recurse | Where-Object {$_.name -match "^.*\ \([1-9][0-9]*\)\..*$"}
    foreach ($file in $files) {

        $fileOrgFullName = $file.Directory.FullName + "\" + ($file.BaseName -replace " \([1-9][0-9]*\)$", "") + $file.Extension
        if (test-path $fileOrgFullName) {

            $fileOrg = gi $fileOrgFullName
            if ($file.LastAccessTime -gt $fileOrg.LastAccessTime) {

                cp $file.FullName $fileOrg.FullName
            } 
            rm $file.fullName
        } else {

            ren $file.FullName $fileOrgFullName
        }
    }     

相关内容