Страница 5 из 8
Добавлено: Чт июл 28, 2011 01:00
Flasher
shveicar писал(а):выделять файлы или папки с определенным количеством символов в имени
Не понял связи. Шаг - одна схема, кол-во символов - другая. Одно с другим логически не вяжется. При разной сортировке подобные файлы могут быть разбросаны как угодно. Соответственно, шага как такового не будет. Как вариант можно фильтровать по кол-ву символов командой
cm_SrcUserDef и уже в таком списке выделять с шагом.
shveicar писал(а):параметр - начальная позиция, мне не совсем понятен
Первый выделенный элемент. Этот параметр должен быть не больше второго, тогда можно подставлять разные значения.
shveicar писал(а):Ксати - в оригинале этот скрипт, у меня, почему то не работает.
Сочувствую. )
Добавлено: Чт июл 28, 2011 23:54
shveicar
Добрый вечер, Спасибо за ответ,
Как вариант можно фильтровать по кол-ву символов командой cm_SrcUserDef
Если я правильно понял имеется ввиду поиск исходя из регулярных выражений. К сожалению это не всегда удобно. Ну например в открытой панели большой список имен файлов, Поскольку команда -упорядочить их по типу (не всегда адекватна). Во многих случаях удобно выделять файлы по длине имени файла(то есть например 10 символов(буквы или цифры)) - чтобы создать затем файл список, конечно во многих случаях удобно и выделение с шагом, Если возможно, подскажите вариант выделения нужного количества символов, За Сочувствие - Спасибо.
Добавлено: Пт июл 29, 2011 00:24
Flasher
shveicar писал(а):Если я правильно понял имеется ввиду поиск исходя из регулярных выражений.
Нет. Я где-то про поиск писал? Я писал о фильтре. См., что выводит команда. Для данного случая предлагается в скрипте создать цикл с подстановкой знаков вопроса, кол-во которых ограничено заданным максимумом и которые вставляются в поле диалога (?????.???/*) с последующим подтверждением.
shveicar писал(а):Во многих случаях удобно выделять файлы по длине имени файла(то есть например 10 символов(буквы или цифры)) - чтобы создать затем файл список, конечно во многих случаях удобно и выделение с шагом
Чисто из любопытства, примеры подобного удобства можно привести?
shveicar писал(а): Если возможно, подскажите вариант выделения нужного количества символов
Не понял. При чём тут выделение символов? Символы выделяются только у одного файла при переименовании. Я так думал, что речь о выделении в файловой панели элементов списка , имеющих N-ое кол-во символов. Кстати, это кол-во включает точку и расширение?
На всякий случай сообщаю, для меня есть смысл решать вопрос выделения по кол-ву символов в отдельном топике.
Добавлено: Пт июл 29, 2011 00:58
shveicar
На всякий случай сообщаю, для меня есть смысл решать вопрос выделения по кол-ву символов в отдельном топике
Что-ж, создам отдельный
топик .
Добавлено: Сб ноя 19, 2011 13:39
Flasher
Немного
модифицировал.
Код: Выделить всё
'=========================================================================
' Выделить элементы с заданным интервалом, начиная с элемента под курсором
' Необходима регистрация 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
Добавлено: Ср янв 18, 2012 09:18
Erema
В простых случаях (когда дублирующие файлы находятся не на одном уровне каталога с исходными) поможет простая команда: "Выделить всё с этим путём").
Но просмотреть "глазками" результат всё же рекомендуется.

Добавлено: Ср янв 18, 2012 11:42
Flasher
Erema
И какое отношение выделение всех файлов, расположенных в одной директории, имеет к выделению дубликатов или выделению с заданным шагом?
Добавлено: Пт янв 20, 2012 11:50
sa
Навеяло постом от
Erema.
Если просто требуется выделить дубликаты для файла под курсором в обычной файловой панели (не результатах поиска), то можно воспользоваться командой “
Выделить все файлы по текущему имени+расширению” (cm_SelectCurrentNameExt), применённой для вида без подкаталогов (Ctrl+B). Кнопка с использованием утилиты
TCMC:
Код: Выделить всё
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCMC\TCMC.exe
cm540 cm2026 cm543 cm2023 cm524 cm537 cm2053 cm525
WCMICONS.DLL,70
Выделить в подкаталогах дубликаты файла под курсором по имени+расширению
-1
Кнопка с использованием
TCFS2:
Код: Выделить всё
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
Такой способ работает, правда, при большом количестве файлов гораздо медленнее, чем обычный поиск.
Добавлено: Пт янв 27, 2012 13:25
sa
Показалось удобным сделать выделение дубликатов файла под курсором, находящихся в папке и подпапках пассивной панели. Кнопкой ограничиться не сумел. Пришлось поместить в кнопку вызов такого скрипта:
Код: Выделить всё
'================================================================
' Описание: Выделить дубликаты файла под курсором,
' находящиеся в папке и подпапках пассивной панели.
' Имя файла может быть дополнено маской,
' задаваемой вторым параметром скрипта. Например,
' строка параметров %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
Сама кнопка:
Код: Выделить всё
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. Дубликаты выделяются без учёта даты (времени), размеров и содержимого файлов, только по имени+расширению, либо, в виде опции, по имени+маске+расширению.
Добавлено: Сб фев 21, 2015 20:32
Nick
Может, кто-нибудь подскажет скрипт для выделения дубликатов по содержимому? (желательно, без использования Script Helper).
Т.е., чтобы работало выделение при отображении дубликатов на самой панели (после поиска дубликатов в TC). Например, чтобы выделялись все файлы в группе, кроме первого. Число одинаковых файлов в группе - разное.
Добавлено: Сб фев 21, 2015 22:12
Avada
Nick
Num+ в панели с найденными дубликатами (TC 8.50 и выше). Там всё это есть без всяких скриптов.
Добавлено: Вс фев 22, 2015 01:22
Flasher
Могу
по размеру предложить:
Код: Выделить всё
'=============================================================
' Выделить файлы, одноразмерные с первыми в группах дубликатов
' Параметр: %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
Добавлено: Вт фев 24, 2015 11:31
Nick
Avada
Ok. Такого выделения давно не хватало. Наверно, достали автора с подобными запросами и он таки решил сделать. И справки по этому пункту даже еще и нету. Также, что неудобно, при Num+ - сбрасывается NumLock.
Flasher
Спасибо за скрипт (без Script Helper). Я стараюсь, по возможности все же использовать сравнение по содержимому, т.к. часто бывает, что размеры - одинаковые, а содержимое - разное. Тратится, конечно, намного больше времени, но зато - надежнее.
P.S. Можно ли как-то еще сделать, чтобы отметка сохранялась (при поиске через Alt+F7) на опции "по содержимому", а не перебрасывалась на отметку "по имени"?
Добавлено: Вт фев 24, 2015 11:48
Avada
Nick
Английская справка содержит всё, что следует, с момента появления новых возможностей. Найдите там через указатель справки раздел
Dialog box: Select duplicate files или перейдите по ссылке из раздела
Selecting files. А русская справка для 8.5x пока не готова.
Открытие диалога привязано не к клавише как таковой, а к команде "Выделить группу..." (
cm_SpreadSelection), которую можно вызывать, разумеется, и другими способами.
Опции поиска дубликатов сейчас не сохраняются, но никто не мешает создать с нужными опциями шаблон поиска и вызывать его далее как параметр команды
LOADSEARCH. См.
здесь.
Добавлено: Ср фев 25, 2015 03:11
Flasher
Nick писал(а):Я стараюсь, по возможности все же использовать сравнение по содержимому, т.к. часто бывает, что размеры - одинаковые, а содержимое - разное.
Я имел в виду выделение по размеру, а не поиск. Искать-то можно хоть так, хоть эдак, неважно.
Вероятность, что две ближайшие группы совпадут по размеру, но окажутся разными по содержимому = 0,0000000000000001%.
