Em vez de depender do nome do arquivo, eu executaria e armazenaria a soma MD5 de cada arquivo e excluiria quando uma duplicata fosse detectada dessa maneira, para que versões mais recentes de um arquivo não sejam descartadas.
Powershell Foi enviado desde o Windows Vista. Eu tenho muitos clientes que baixam arquivos, esquecem onde eles acabam fazendo o download do mesmo arquivo. Esses arquivos, se forem duplicados, são anexados com um número. ie ... arquivo (1) arquivo (2) dependendo de quantas vezes eles fizeram o download do arquivo novamente.
Como faço para remover essas duplicatas com o powershell?
Em vez de depender do nome do arquivo, eu executaria e armazenaria a soma MD5 de cada arquivo e excluiria quando uma duplicata fosse detectada dessa maneira, para que versões mais recentes de um arquivo não sejam descartadas.
A implementação depende de como você lida com uma duplicata.
Aqui eu assumi que a última cópia acessada seria a mais valiosa para os usuários. Para fins de limpeza, removerei "()" do nome de arquivo da cópia eleita. Eu não testei realmente, então, por favor, tente com cuidado.
$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
}
}
Tags powershell duplicate