Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Удаление дубликатов 
Author Message
Volniy



PostPosted: Sat Apr 07, 2007 04:56    Post subject: Удаление дубликатов файлов с одинаковым размером Reply with quote

yuris5 wrote:
Вот бы ещё что бы работал при разных именах файлов...

Неожиданно мне и самому это дело понадобилось. Вот вариант реализации скрипта. Не забываем об выделение всего списка с результатами поисков перед его применением. Строка с удалением только что выделенных строк закомментирована, это для самых смелых Wink
Code:
'=====================[ Start of file ]=========================

'  File:         SelNotFirstFileSize.vbs
'  Description:  Выделяет все парные файлы, кроме первого, в списке,
'                созданном поиском дубликатов ПО РАЗМЕРУ ФАЙЛА
'  Installation: Создайте кнопку на панели TC
'                Команда: "диск:\путь\к\файлу\SelNotFirstFileSize.vbs"
'                Параметры: "%L"
'  Copyright:    (c) 2007, Volniy

Option Explicit
Dim FSO, ListFile, SelFile,TCS
Dim Cnt, Buf, FileSize1, FileSize2
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
FileSize1 = -1
Do While Not ListFile.AtEndOfStream
  Set SelFile = FSO.GetFile(ListFile.ReadLine)
  FileSize2 = SelFile.Size
  If FileSize2 = FileSize1 Then
     Buf = Buf & SelFile & vbNewLine
     Cnt = Cnt + 1
  End If
  FileSize1 = FileSize2
Loop
ListFile.Close
TCS.SetTextToClip CStr(Buf)
TCS.SendCommand "cm_LoadSelectionFromClip", True
'TCS.SendCommand "cm_Delete", True
Set SelFile = Nothing
Set ListFile = Nothing
Set FSO = Nothing
Set TCS = Nothing
MsgBox "Выделено дубликатов: " & Cnt, vbInformation, "Завершено!"
WScript.Quit

'=====================[  End of file  ]=========================


В принципе можно использовать этот скрипт и c поиском файлов совпадающих по содержимому, но тут вас подстерегает не сразу заметная опасность. Теоретически существует вероятность (не высокая, но все-таки...) того, что в двух соседних группах найденных дубликатов окажутся файлы с одинаковыми размерами, но при этом не совпадающие по содержимому. При этом для удаления будет выделены все файлы второй по порядку следования группы и, как результат, можно будет остаться вообще без единого экземпляра той группы. Так что или понадобится дополнительный визуальный контроль за результатами выделения или нужно будет к скрипту прикручивать проверку файлов по содержимому (с помощью внешней утилиты командной строки или средствами скриптов, второе будет медленно и еще ненадежно с нетекстовыми файлами).

Замечание это, кстати, справедливо и для версии скрипта, работающей с дубликатами имен файлов.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group