View previous topic :: View next topic |
Author |
Message |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jul 28, 2011 01:00 Post subject: |
|
|
shveicar wrote: | выделять файлы или папки с определенным количеством символов в имени | Не понял связи. Шаг - одна схема, кол-во символов - другая. Одно с другим логически не вяжется. При разной сортировке подобные файлы могут быть разбросаны как угодно. Соответственно, шага как такового не будет. Как вариант можно фильтровать по кол-ву символов командой cm_SrcUserDef и уже в таком списке выделять с шагом. shveicar wrote: | параметр - начальная позиция, мне не совсем понятен | Первый выделенный элемент. Этот параметр должен быть не больше второго, тогда можно подставлять разные значения.
shveicar wrote: | Ксати - в оригинале этот скрипт, у меня, почему то не работает. | Сочувствую. ) |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Thu Jul 28, 2011 23:54 Post subject: |
|
|
Добрый вечер, Спасибо за ответ, Quote: | Как вариант можно фильтровать по кол-ву символов командой cm_SrcUserDef | Если я правильно понял имеется ввиду поиск исходя из регулярных выражений. К сожалению это не всегда удобно. Ну например в открытой панели большой список имен файлов, Поскольку команда -упорядочить их по типу (не всегда адекватна). Во многих случаях удобно выделять файлы по длине имени файла(то есть например 10 символов(буквы или цифры)) - чтобы создать затем файл список, конечно во многих случаях удобно и выделение с шагом, Если возможно, подскажите вариант выделения нужного количества символов, За Сочувствие - Спасибо. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Jul 29, 2011 00:24 Post subject: |
|
|
shveicar wrote: | Если я правильно понял имеется ввиду поиск исходя из регулярных выражений. | Нет. Я где-то про поиск писал? Я писал о фильтре. См., что выводит команда. Для данного случая предлагается в скрипте создать цикл с подстановкой знаков вопроса, кол-во которых ограничено заданным максимумом и которые вставляются в поле диалога (?????.???/*) с последующим подтверждением.
shveicar wrote: | Во многих случаях удобно выделять файлы по длине имени файла(то есть например 10 символов(буквы или цифры)) - чтобы создать затем файл список, конечно во многих случаях удобно и выделение с шагом | Чисто из любопытства, примеры подобного удобства можно привести?
shveicar wrote: | Если возможно, подскажите вариант выделения нужного количества символов | Не понял. При чём тут выделение символов? Символы выделяются только у одного файла при переименовании. Я так думал, что речь о выделении в файловой панели элементов списка , имеющих N-ое кол-во символов. Кстати, это кол-во включает точку и расширение?
На всякий случай сообщаю, для меня есть смысл решать вопрос выделения по кол-ву символов в отдельном топике. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Jul 29, 2011 00:58 Post subject: |
|
|
Quote: | На всякий случай сообщаю, для меня есть смысл решать вопрос выделения по кол-ву символов в отдельном топике | Что-ж, создам отдельный топик . |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 19, 2011 13:39 Post subject: |
|
|
Немного модифицировал.
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 |
|
 |
Erema
Joined: 27 Jul 2008 Posts: 5 Location: Far East
|
(Separately) Posted: Wed Jan 18, 2012 09:18 Post subject: |
|
|
В простых случаях (когда дублирующие файлы находятся не на одном уровне каталога с исходными) поможет простая команда: "Выделить всё с этим путём").
Но просмотреть "глазками" результат всё же рекомендуется.  |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jan 18, 2012 11:42 Post subject: |
|
|
Erema
И какое отношение выделение всех файлов, расположенных в одной директории, имеет к выделению дубликатов или выделению с заданным шагом? |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2688
|
(Separately) Posted: Fri Jan 20, 2012 11:50 Post subject: |
|
|
Навеяло постом от 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 |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2688
|
(Separately) Posted: Fri Jan 27, 2012 13:25 Post subject: |
|
|
Показалось удобным сделать выделение дубликатов файла под курсором, находящихся в папке и подпапках пассивной панели. Кнопкой ограничиться не сумел. Пришлось поместить в кнопку вызов такого скрипта:
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 |
|
 |
Nick
Joined: 26 Dec 2014 Posts: 107
|
(Separately) Posted: Sat Feb 21, 2015 21:32 Post subject: |
|
|
Может, кто-нибудь подскажет скрипт для выделения дубликатов по содержимому? (желательно, без использования Script Helper).
Т.е., чтобы работало выделение при отображении дубликатов на самой панели (после поиска дубликатов в TC). Например, чтобы выделялись все файлы в группе, кроме первого. Число одинаковых файлов в группе - разное. |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10415 Location: Россия, Саратов
|
(Separately) Posted: Sat Feb 21, 2015 23:12 Post subject: |
|
|
Nick
Num+ в панели с найденными дубликатами (TC 8.50 и выше). Там всё это есть без всяких скриптов. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Feb 22, 2015 02:22 Post subject: |
|
|
Могу по размеру предложить:
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 |
|
 |
Nick
Joined: 26 Dec 2014 Posts: 107
|
(Separately) Posted: Tue Feb 24, 2015 12:31 Post subject: |
|
|
Avada
Ok. Такого выделения давно не хватало. Наверно, достали автора с подобными запросами и он таки решил сделать. И справки по этому пункту даже еще и нету. Также, что неудобно, при Num+ - сбрасывается NumLock.
Flasher
Спасибо за скрипт (без Script Helper). Я стараюсь, по возможности все же использовать сравнение по содержимому, т.к. часто бывает, что размеры - одинаковые, а содержимое - разное. Тратится, конечно, намного больше времени, но зато - надежнее.
P.S. Можно ли как-то еще сделать, чтобы отметка сохранялась (при поиске через Alt+F7) на опции "по содержимому", а не перебрасывалась на отметку "по имени"? |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10415 Location: Россия, Саратов
|
(Separately) Posted: Tue Feb 24, 2015 12:48 Post subject: |
|
|
Nick
Английская справка содержит всё, что следует, с момента появления новых возможностей. Найдите там через указатель справки раздел Dialog box: Select duplicate files или перейдите по ссылке из раздела Selecting files. А русская справка для 8.5x пока не готова.
Открытие диалога привязано не к клавише как таковой, а к команде "Выделить группу..." (cm_SpreadSelection), которую можно вызывать, разумеется, и другими способами.
Опции поиска дубликатов сейчас не сохраняются, но никто не мешает создать с нужными опциями шаблон поиска и вызывать его далее как параметр команды LOADSEARCH. См. здесь. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Feb 25, 2015 04:11 Post subject: |
|
|
Nick wrote: | Я стараюсь, по возможности все же использовать сравнение по содержимому, т.к. часто бывает, что размеры - одинаковые, а содержимое - разное. | Я имел в виду выделение по размеру, а не поиск. Искать-то можно хоть так, хоть эдак, неважно.
Вероятность, что две ближайшие группы совпадут по размеру, но окажутся разными по содержимому = 0,0000000000000001%.  _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
|
|
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
|