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
}
}