Powershell Поставляется со времен Windows Vista. У меня есть много клиентов, которые скачивают файлы, забывают, где они заканчивают повторной загрузкой одного и того же файла. К этим файлам, если они являются дубликатами, добавляется номер. то есть ... file(1) file(2) в зависимости от того, сколько раз они перезагружали файл.

Как мне удалить эти дубликаты с PowerShell?

2 ответа2

0

Вместо того, чтобы зависеть от имени файла, я запускаю и сохраняю сумму MD5 каждого файла и удаляю, когда дубликат обнаруживается таким образом, чтобы более новая версия файла не отбрасывалась.

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

0

Реализация зависит от того, как вы обрабатываете дубликаты.
Здесь я предположил, что последняя доступная копия будет наиболее ценной для пользователей. В целях ведения домашнего хозяйства я бы удалил "()" из имени файла выбранной копии. Я на самом деле не проверял это, поэтому, пожалуйста, попробуйте с осторожностью.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .