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 

Выделение дубликатов
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jul 28, 2011 01:00    Post subject: Reply with quote

shveicar wrote:
выделять файлы или папки с определенным количеством символов в имени
Не понял связи. Шаг - одна схема, кол-во символов - другая. Одно с другим логически не вяжется. При разной сортировке подобные файлы могут быть разбросаны как угодно. Соответственно, шага как такового не будет. Как вариант можно фильтровать по кол-ву символов командой cm_SrcUserDef и уже в таком списке выделять с шагом.
shveicar wrote:
параметр - начальная позиция, мне не совсем понятен
Первый выделенный элемент. Этот параметр должен быть не больше второго, тогда можно подставлять разные значения.
shveicar wrote:
Ксати - в оригинале этот скрипт, у меня, почему то не работает.
Сочувствую. )
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Thu Jul 28, 2011 23:54    Post subject: Reply with quote

Добрый вечер, Спасибо за ответ,
Quote:
Как вариант можно фильтровать по кол-ву символов командой cm_SrcUserDef
Если я правильно понял имеется ввиду поиск исходя из регулярных выражений. К сожалению это не всегда удобно. Ну например в открытой панели большой список имен файлов, Поскольку команда -упорядочить их по типу (не всегда адекватна). Во многих случаях удобно выделять файлы по длине имени файла(то есть например 10 символов(буквы или цифры)) - чтобы создать затем файл список, конечно во многих случаях удобно и выделение с шагом, Если возможно, подскажите вариант выделения нужного количества символов, За Сочувствие - Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Jul 29, 2011 00:24    Post subject: Reply with quote

shveicar wrote:
Если я правильно понял имеется ввиду поиск исходя из регулярных выражений.
Нет. Я где-то про поиск писал? Я писал о фильтре. См., что выводит команда. Для данного случая предлагается в скрипте создать цикл с подстановкой знаков вопроса, кол-во которых ограничено заданным максимумом и которые вставляются в поле диалога (?????.???/*) с последующим подтверждением.
shveicar wrote:
Во многих случаях удобно выделять файлы по длине имени файла(то есть например 10 символов(буквы или цифры)) - чтобы создать затем файл список, конечно во многих случаях удобно и выделение с шагом
Чисто из любопытства, примеры подобного удобства можно привести?
shveicar wrote:
Если возможно, подскажите вариант выделения нужного количества символов
Не понял. При чём тут выделение символов? Символы выделяются только у одного файла при переименовании. Я так думал, что речь о выделении в файловой панели элементов списка , имеющих N-ое кол-во символов. Кстати, это кол-во включает точку и расширение?

На всякий случай сообщаю, для меня есть смысл решать вопрос выделения по кол-ву символов в отдельном топике.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri Jul 29, 2011 00:58    Post subject: Reply with quote

Quote:
На всякий случай сообщаю, для меня есть смысл решать вопрос выделения по кол-ву символов в отдельном топике
Что-ж, создам отдельный топик .
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Nov 19, 2011 13:39    Post subject: Reply with quote

Немного модифицировал.
Code:
'=========================================================================
' Выделить элементы с заданным интервалом, начиная с элемента под курсором

' Необходима регистрация Script Helper ActiveX for TC

' Параметры: %N <режим выделения> <шаг>
' Режим выделения: 1 - всё; 2 - только файлы; 3 - только папки
' Пример: %N 2 5
'=========================================================================
On Error Resume Next
With WScript.Arguments
  Start = .Item(0)
  Mode  = .Item(1)
  Step  = .Item(2)
End With

Set D = CreateObject("Scripting.Dictionary")
With CreateObject("TCScript.Helper")
  .LockTC True
  T = .GetTextFromClip
  .SendCommand 330&Mode
  List = .GetSrcSelectedFiles(0)
  UL = UBound(List)
  .SendCommand 524
  i = 0
  For Each F in List
    D.Add F, i
    i = i + 1
  Next
  If Abs(UL) >= Abs(Step) Then
    For n = D.Item(Start) To UL
      Sp = Sp & List(n) & vbNewLine
      n = n + Step
    Next
    .SetTextToClip CStr(Sp)
    .SendCommand 2033, True
  End If
  .SetTextToClip(T)
  .LockTC False
End With
Set D = Nothing
WScript.Quit
Back to top
View user's profile Send private message
Erema



Joined: 27 Jul 2008
Posts: 5
Location: Far East

Post (Separately) Posted: Wed Jan 18, 2012 09:18    Post subject: Reply with quote

В простых случаях (когда дублирующие файлы находятся не на одном уровне каталога с исходными) поможет простая команда: "Выделить всё с этим путём"). Cool

Но просмотреть "глазками" результат всё же рекомендуется. Rolling Eyes
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jan 18, 2012 11:42    Post subject: Reply with quote

Erema
И какое отношение выделение всех файлов, расположенных в одной директории, имеет к выделению дубликатов или выделению с заданным шагом?
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2688

Post (Separately) Posted: Fri Jan 20, 2012 11:50    Post subject: Reply with quote

Навеяло постом от Erema.
Если просто требуется выделить дубликаты для файла под курсором в обычной файловой панели (не результатах поиска), то можно воспользоваться командой “Выделить все файлы по текущему имени+расширению” (cm_SelectCurrentNameExt), применённой для вида без подкаталогов (Ctrl+B). Кнопка с использованием утилиты TCMC:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCMC\TCMC.exe
cm540 cm2026 cm543 cm2023 cm524 cm537 cm2053 cm525
WCMICONS.DLL,70
Выделить в подкаталогах дубликаты файла под курсором по имени+расширению


-1
Кнопка с использованием TCFS2:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef  "run_item(locktc, 1) tcm(540) tcm(2026) tcm(543) tcm(2023) tcm(524) tcm(537) tcm(2053) tcm(525) run_item(locktc, 0) run_item(update)"
WCMICONS.DLL,70
Выделить в подкаталогах дубликаты файла под курсором по имени+расширению


-1

Такой способ работает, правда, при большом количестве файлов гораздо медленнее, чем обычный поиск.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2688

Post (Separately) Posted: Fri Jan 27, 2012 13:25    Post subject: Reply with quote

Показалось удобным сделать выделение дубликатов файла под курсором, находящихся в папке и подпапках пассивной панели. Кнопкой ограничиться не сумел. Пришлось поместить в кнопку вызов такого скрипта:
Code:
'================================================================
'  Описание:  Выделить дубликаты файла под курсором,
'            находящиеся в папке и подпапках пассивной панели.
'             Имя файла может быть дополнено маской,
'            задаваемой вторым параметром скрипта. Например,
'            строка параметров %P%N%Z * позволит выделить файлы
'            с именами, начинающимися с имени файла под курсором.
' Параметры: %P%N%Z [маска]
'Требования: Необходима регистрация WSH Helper for TC by Volniy
'================================================================
Option Explicit
Dim FSO, TCS, P_N, P_N_Suf, PosPnt, PasDir, TextClip
If WScript.Arguments.Count < 1 Then
  MsgBox "Не указаны параметры: %P%N%Z", _
   vbOKOnly + vbCritical, "Выделение дубликатов файла"
  WScript.Quit
End If
P_N = WScript.Arguments(0)
PosPnt = InStrRev(P_N,".")
If WScript.Arguments.Count > 1 Then
   If PosPnt > InStrRev(P_N,"\") Then
      P_N_Suf = Mid(P_N, 1, PosPnt - 1) & WScript.Arguments(1) _
       & Mid(P_N, PosPnt)
   Else
      P_N_Suf = P_N & WScript.Arguments(1)
   End If
Else
   P_N_Suf = P_N
End If
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(P_N) or InStrRev(P_N,"\") = Len(P_N) Then
  MsgBox "Курсор должен располагаться на файле", _
   vbOKOnly + vbCritical,  "Выделение дубликатов файла"
  Set FSO = Nothing
  WScript.Quit
End If
Set TCS = CreateObject("TCScript.Helper")
TextClip = TCS.GetTextFromClip
TCS.LockTC True
TCS.SendKeystroke "{TAB}"
TCS.SendCommand  "cm_RereadSource", True
PasDir = TCS.GetSrcPath
TCS.SendCommand "cm_DirBranch", True
TCS.SetTextToClip "*""" & Mid(P_N_Suf, InStrRev(P_N_Suf,"\") + 1) & """"
TCS.SendCommand "cm_LoadSelectionFromClip", True
TCS.SendCommand "cm_ShowOnlySelected", True
If InStr(LCase(P_N), LCase(PasDir)) = 1 Then
   TCS.SetTextToClip Mid(P_N, Len(PasDir) + 2)
   TCS.SendCommand "cm_LoadSelectionFromClip", True
   TCS.SendCommand "cm_ExchangeSelection", True
End If
TCS.SendKeystroke "{TAB}"
TCS.LockTC False
TCS.SetTextToClip(TextClip)
Set FSO = Nothing
Set TCS = Nothing
Wscript.Quit
Сама кнопка:
Code:
TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\VBS\Выделить дубликаты на пассивной панели.vbs"
%P%N%Z
WCMICONS.DLL,70
Выделить дубликаты на пассивной панели


-1
P.S.
1. Чтобы перейти к нужному файлу на пассивной панели необходимо установить на него курсор и нажать Ctrl+B (вызвать команду “Показать все файлы без подкаталогов” для снятия этого вида).
2. Вернуть обычный вид панели можно с помощью F2 (команда “Обновить содержимое панели”) - независимо от местоположения курсора на пассивной панели, либо той же командой Ctrl+B, при условии, что курсор расположен на строке [..].
3. Дубликаты можно искать также и из архивов активной панели, только надо учесть: если расположить курсор на папке в таком архиве, то скрипт будет пытаться найти дубликаты среди файлов.
4. Дубликаты выделяются без учёта даты (времени), размеров и содержимого файлов, только по имени+расширению, либо, в виде опции, по имени+маске+расширению.
Back to top
View user's profile Send private message
Nick



Joined: 26 Dec 2014
Posts: 107

Post (Separately) Posted: Sat Feb 21, 2015 21:32    Post subject: Reply with quote

Может, кто-нибудь подскажет скрипт для выделения дубликатов по содержимому? (желательно, без использования Script Helper).
Т.е., чтобы работало выделение при отображении дубликатов на самой панели (после поиска дубликатов в TC). Например, чтобы выделялись все файлы в группе, кроме первого. Число одинаковых файлов в группе - разное.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10415
Location: Россия, Саратов

Post (Separately) Posted: Sat Feb 21, 2015 23:12    Post subject: Reply with quote

Nick
Num+ в панели с найденными дубликатами (TC 8.50 и выше). Там всё это есть без всяких скриптов.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Feb 22, 2015 02:22    Post subject: Reply with quote

Могу по размеру предложить:
Code:
'=============================================================
' Выделить файлы, одноразмерные с первыми в группах дубликатов
' Параметр: %P
'=================== Путь к утилите TCFS2 ====================
TCFS2 = """%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe"""
'=============================================================
If WScript.Arguments.Count Then WScript.Quit
Set FSO = CreateObject("Scripting.FileSystemObject")
R = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407"
With CreateObject("WScript.Shell")
  .Run TCFS2 & " /ef msg($0B,0) tcm(3302) tcm(2018) tcm(3304)",,True
  On Error Resume Next
  A = .RegRead(R) : If A > 0 Or Err.Number <> 0 Then .RegWrite R, 0, "REG_DWORD"
  List = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
  For Each F in Split(List, vbNewLine)
    Size1 = FSO.GetFile(F).Size
    If CStr(Size1) = CStr(Size2) Then S = S & vbNewLine & F
    Size2 = Size1
  Next : Temp = CreateObject("Shell.Application").NameSpace(._
  Environment("Process")("TEMP")).Self.Path & "\" & FSO.GetTempName
  FSO.CreateTextFile(Temp,,True).Write S
  .Run "%comspec% /c clip < """ & Temp & """", 0, True
  .Run TCFS2 & " /ef msg($0B,1) tcm(2033)"
  .Run "%comspec% /c type|clip ", 0
  FSO.DeleteFile Temp, 1 : If A > 0 Then .RegWrite R, A, "REG_DWORD"
End With

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Nick



Joined: 26 Dec 2014
Posts: 107

Post (Separately) Posted: Tue Feb 24, 2015 12:31    Post subject: Reply with quote

Avada
Ok. Такого выделения давно не хватало. Наверно, достали автора с подобными запросами и он таки решил сделать. И справки по этому пункту даже еще и нету. Также, что неудобно, при Num+ - сбрасывается NumLock.
Flasher
Спасибо за скрипт (без Script Helper). Я стараюсь, по возможности все же использовать сравнение по содержимому, т.к. часто бывает, что размеры - одинаковые, а содержимое - разное. Тратится, конечно, намного больше времени, но зато - надежнее.

P.S. Можно ли как-то еще сделать, чтобы отметка сохранялась (при поиске через Alt+F7) на опции "по содержимому", а не перебрасывалась на отметку "по имени"?
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10415
Location: Россия, Саратов

Post (Separately) Posted: Tue Feb 24, 2015 12:48    Post subject: Reply with quote

Nick
Английская справка содержит всё, что следует, с момента появления новых возможностей. Найдите там через указатель справки раздел Dialog box: Select duplicate files или перейдите по ссылке из раздела Selecting files. А русская справка для 8.5x пока не готова.
Открытие диалога привязано не к клавише как таковой, а к команде "Выделить группу..." (cm_SpreadSelection), которую можно вызывать, разумеется, и другими способами.
Опции поиска дубликатов сейчас не сохраняются, но никто не мешает создать с нужными опциями шаблон поиска и вызывать его далее как параметр команды LOADSEARCH. См. здесь.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Feb 25, 2015 04:11    Post subject: Reply with quote

Nick wrote:
Я стараюсь, по возможности все же использовать сравнение по содержимому, т.к. часто бывает, что размеры - одинаковые, а содержимое - разное.
Я имел в виду выделение по размеру, а не поиск. Искать-то можно хоть так, хоть эдак, неважно.
Вероятность, что две ближайшие группы совпадут по размеру, но окажутся разными по содержимому = 0,0000000000000001%.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
Page 5 of 8

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group