Страница 1 из 2
Удаление дубликатов
Добавлено: Вс апр 01, 2007 18:52
yuris5
Добрый день. Собственно сабж.
Пробовал SelNotFirst.vbs от Volniy но чёт не работает,
хотя не ошибок нет , нет и результата...
Может кто сделал, или знает как удалить дубликаты.
--------------------------------------------------------------------------------------
И ещё, есть прога DupDetector которая ищет похожие картинки (можно
задать % похожести), в результате выдает список в миниатюры
картинок, но грабли в том что если дупликатов тыщы, а удалять по
одному то
Может кто знает как сделать подобное в нашем любимом ТС, но и для
других типов файлов (мр3, jpeg, и д.р.)
--------------------------------------------------------------------------------------
Re: Удаление дубликатов
Добавлено: Вс апр 01, 2007 19:30
Volniy
yuris5 писал(а):Добрый день. Собственно сабж.
Пробовал SelNotFirst.vbs от Volniy но чёт не работает,
хотя не ошибок нет , нет и результата...
Может кто сделал, или знает как удалить дубликаты.
Нельзя ли поконкретнее, что делалось и что именно не получилось. Заранее скажу, что если скрипт использовался после поиска дубликатов
со снятой галочкой "по имени", так он и не должен в таком случае работать (дубликаты скриптом определяются именно
по именам файлов, без путей к ним).
Re: Удаление дубликатов
Добавлено: Вс апр 01, 2007 20:17
yuris5
Вау, мне ответил сам СОЗДАТЕЛЬ!
Уважаю (и часто пользуюсь скриптами) Volniy, но вот с этим - грабли. А может запустится... Итак:
В каталоге с папками и файлами делаю поиск файлов -> Дополнительно -> Поиск дубликатов: по имени и по размеру.
Далее Файлы на панель.
Далее жму кнопку:
button57=C:\WINDOWS\System32\WScript.exe
cmd57=""c:\Program Files\totalcmd651\plugins\util\SelNotFirst.vbs""
param57=""%L""
menu57=SelNotFirst
Код: Выделить всё
' File: SelNotFirst.vbs
' Description: Удаляет все парные файлы кроме первого
' из списка, созданного поиском дубликатов в ТС
' Installation: Создайте кнопку на панели TC
' Команда: "диск:\путь\к\файлу\SelNotFirst.vbs"
' Параметры: "%L"
' Copyright: (c) 2006, Volniy
Option Explicit
Dim FSO, ListFile, SelFile, TCS
Dim File1, File2, Cnt, Buf
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
Do While Not ListFile.AtEndOfStream
SelFile = ListFile.ReadLine
File2 = FSO.GetFileName(SelFile)
If StrComp(File1, File2, 1) = 0 Then
Buf = Buf & SelFile & vbNewLine
Cnt = Cnt + 1
End If
File1 = File2
Loop
ListFile.Close
TCS.ClearClip
TCS.SetTextToClip CStr(Buf)
TCS.SendCommand "cm_LoadSelectionFromClip", True
Set ListFile = Nothing
Set FSO = Nothing
Set TCS = Nothing
MsgBox "Выделено дубликатов: " & Cnt, vbInformation, "Завершено!"
WScript.Quit
Выплевывает окно:
Завершено!
Выделено дубликатов:
ОК
В итоге ничего не выделено...
Re: Удаление дубликатов
Добавлено: Вс апр 01, 2007 20:41
Volniy
yuris5 писал(а):В каталоге с папками и файлами делаю поиск файлов -> Дополнительно -> Поиск дубликатов: по имени и по размеру.
Далее Файлы на панель.
Далее жму кнопку:
button57=C:\WINDOWS\System32\WScript.exe
cmd57=""c:\Program Files\totalcmd651\plugins\util\SelNotFirst.vbs""
param57=""%L""
menu57=SelNotFirst
Ну ёмаё, надо же трошки задумываться все-таки, даже используя чужие наработки
Так вот,
%L - это ведь путь к файлу-списку
выделенных в активной панели файлов. Так что ты, кажись, пропустил:
Далее "Выделить всё"
перед
Далее жму кнопку:
А таперича работает?
PS Посмотрел свой старый пост с этим скриптом и что я там увидел? А вот что:
Не забыть только выделить весь список найденных дубликатов перед запуском скрипта!
Re: Удаление дубликатов
Добавлено: Пн апр 02, 2007 19:33
yuris5
Volniy писал(а):
Так что ты, кажись, пропустил:
Далее "Выделить всё" перед
Далее жму кнопку:
А таперича работает?
Да! Теперь РАБОТАЕТ!
Вот бы ещё что бы работал при разных именах файлов...
Volniy писал(а):
PS Посмотрел свой старый пост с этим скриптом и что я там увидел? А вот что:Не забыть только выделить весь список найденных дубликатов перед запуском скрипта!
[/quote]
Я бы тоже хотел бы увидеть старый пост...
А может кто подскажет где коллекция скриптов?
И ещё один вопрос: как можно отметить файлы в панели "через один" т.е. в виде "зебры". Пробовал в скрипте отравлять нажатия клавиш {INSERT} и {DOWN} , но за перемещающимся курсором нету выделенных файлов...

Добавлено: Чт апр 05, 2007 15:56
aLexx
А напиши-ка сюды весь текст скрипта.
Наверняка, что-то не то делаешь...

Re: Удаление дубликатов
Добавлено: Чт апр 05, 2007 19:03
Volniy
yuris5 писал(а):И ещё один вопрос: как можно отметить файлы в панели "через один" т.е. в виде "зебры".
Пишу код без тестирования, наобум. Я не понимаю, зачем это может быть нужно, но раз уж просили, то...
Код: Выделить всё
Option Explicit
Dim FSO, ListFile, SelFile, TCS
Dim File1, File2, Cnt, Buf
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TCS = CreateObject("TCScript.Helper")
Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
Do While Not ListFile.AtEndOfStream
SelFile = ListFile.ReadLine
Cnt = Cnt + 1
File2 = FSO.GetFileName(SelFile)
If Cnt Mod 2 = 0 Then
Buf = Buf & SelFile & vbNewLine
End If
Loop
ListFile.Close
TCS.ClearClip
TCS.SetTextToClip CStr(Buf)
TCS.SendCommand "cm_LoadSelectionFromClip", True
Set ListFile = Nothing
Set FSO = Nothing
Set TCS = Nothing
MsgBox "Выделено ""зеброй"":): " & Cnt \ 2 & " файлов", vbInformation, "Завершено!"
WScript.Quit
Re: Удаление дубликатов
Добавлено: Пт апр 06, 2007 08:00
yuris5
-------------------------------------------------------------------------------
Огромное
СПАСИБО г-ну Volniy за прекрасно работающий скрипт!
-------------------------------------------------------------------------------
И ещё один вопрос: Чем воспользоваться для поиска и удаления одинаковых по сути файлов музыки (mp3,wma,ogg, ...), но имеющих разный размер, название, битрейт. Предпологаю такая прога должна делать анализ файлов по образу огибающей звука.
Только не закидавайте, плз, ответами типа
GO -> ya.ru ... google.com и п.т.

Добавлено: Пт апр 06, 2007 11:56
funduk
Сортировка по длине тебя спасёт. Ну если там ещё и теги нормальные есть, то используй контентные плагины для аудио, например, AudioInfo.
Иногда бывает полезно сравнивать по содержимому одинаково закодированные файлы разного размера (только смотнреть надо на соответствующие места, не занятые тегами, а их ещё найти надо)...
Добавлено: Пт апр 06, 2007 19:28
Вахмурка
И ещё один вопрос: как можно отметить файлы в панели "через один" т.е. в виде "зебры"
Чем больше вариантов, тем лучше, верно? Вот
мои 5 копеек...
Удаление дубликатов файлов с одинаковым размером
Добавлено: Сб апр 07, 2007 04:56
Volniy
yuris5 писал(а):Вот бы ещё что бы работал при разных именах файлов...
Неожиданно мне и самому это дело понадобилось. Вот вариант реализации скрипта. Не забываем об выделение всего списка с результатами поисков перед его применением. Строка с удалением только что выделенных строк закомментирована, это для самых смелых
Код: Выделить всё
'=====================[ 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 поиском файлов совпадающих
по содержимому, но тут вас подстерегает не сразу заметная
опасность. Теоретически существует вероятность (не высокая, но все-таки...) того, что в двух соседних группах найденных дубликатов окажутся файлы с одинаковыми размерами, но при этом не совпадающие по содержимому. При этом для удаления будет выделены все файлы второй по порядку следования группы и, как результат, можно будет остаться вообще без единого экземпляра той группы. Так что или понадобится дополнительный
визуальный контроль за результатами выделения или нужно будет к скрипту прикручивать проверку файлов по содержимому (с помощью внешней утилиты командной строки или средствами скриптов, второе будет медленно и еще ненадежно с
нетекстовыми файлами).
Замечание это, кстати, справедливо и для версии скрипта, работающей с дубликатами имен файлов.
Добавлено: Сб июл 16, 2011 17:46
Tol!k
Давно написал, но как-то всё не выкладывалось
Код: Выделить всё
@echo off &setlocal enableextensions &chcp 1251 >nul
rem Удаление дубликатов по хешу
rem Параметры: D:\папка
rem Автор: Tol!k
rem Используется RHash http://rhash.anz.ru/
set "folder=%~1"
if "%folder:~-1%"=="\" set "folder=%folder:~0,-1%"
set "hash="
for /f "tokens=1,*" %%a in (
'rhash.exe -M -r --ansi "%folder%" ^|sort'
) do call :dd "%%a" "%%b"
goto :eof
:dd
if "%hash%" == "%~1" (attrib -h %2 &del /q %2)
set "hash=%~1"
goto :eof
Добавлено: Чт апр 25, 2013 09:12
Strek
Volniy
Что делаю не так?
YouTube
Добавлено: Чт апр 25, 2013 11:15
sa
Strek
А если с этим
скриптом попробовать?
Добавлено: Чт апр 25, 2013 11:59
Strek
sa
