Выделение файлов по кол-ву символов в их имени

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Andrey_A писал(а):Я пользуюсь таким скриптом, может поможет, если необходимо подправьте под себя
Спасибо, вот так скрипт, буду тестить.
Flasher писал(а):Прописать %N в параметрах.
Для новой кнопки не забыть очистить путь запуска
Все сделал работает, но опять интересная картина- просто папки и файлы выделяет, но когда отображено все содержимое, работать не хочет, а исходный скрипт скрипте при таком режиме выделяет только каталоги, а с файлами работать не хочет- может проблема в этом ?
Andrey_A писал(а):Всвязи с проблемой Helpera (при большом к-ве файлов) использована утилита NirCmd.exe
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar писал(а):но когда отображено все содержимое, работать не хочет
В каком смысле "отображено всё содержимое"? Содержимое чего?
shveicar писал(а):а исходный скрипт скрипте при таком режиме выделяет только каталоги
При каком "таком" режиме?
shveicar писал(а):может проблема в этом ?
Эта проблема старой версии. В последней этого нет.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

работать не хочет
Я долго пытался, в своё время, справится с буфером с помощью TCS, но NirCmd.exe оказалась стабильней
http://www.nirsoft.net/utils/nircmd.html
скрипт немножко подправил
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Andrey_A
Это, конечно, лучше обсуждать в другом месте, но, честно говоря, при использовании инструмента IE в одном месте скрипта лучше его использовать и в другом.
А касаемо утилит Tol!k уже не раз предлагал ConClip.
Откровенно, совершенно не понятно, зачем для такой простой задачи такой громоздкий код.

Убрал из этого скрипта использование буфера.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher писал(а):В каком смысле "отображено всё содержимое"? Содержимое чего?
Поясняю - захожу в текущей катаог, в нем множество вложенных каталогов с файлами, далее поиск искать все файлы с расширением(.wmv) Далее отобразить все найденое, и вот здесь для сортировки - пытаюсь применить скрипт. На данный момент в таком режиме, а также в режиме рекурсии- работает только плагин filex, А все остальные скрипты -(относящиеся к этой теме) работают в режиме простого выделения(то-есть, срабатывают только в режиме текущей панели, без вложенности) Возможно это связанно с портабельностью totala (честно говоря- первый раз такая ерунда) Helpera -обновил, но безрезультатно. На днях, проверю на виртуальной машине, со стандартным totalom. Скорее всего дело в этом. В любом случае спасибо Всем за помощь.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

shveicar
В режиме DirBranch не работает, потому что в скрипте перебираются соответствующие элементы текущего каталога, а не элементы рекурсивной серии каталогов. К тому же в этом режиме используются относительные пути, а при загрузке выделения из буфера по команде cm_LoadSelectionFromClip тип путей должен соответствовать текущему режиму. Полные пути должны быть для стандартного режима, относительнгые для режима "без подкаталогов". Т.е. тут требуется выделять все файлы, выискивать отправной каталог во всех путях, потом формировать список путей относительно этого каталога и уже потом отправлять отфильтрованный список в буфер и загружать из него выделение. Это процесс довольно много ресурсов будет кушать и глюков, соответственно, может быть ещё больше, чем в приведённых вариантах.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Спасибо Flasher - за разъяснение, но для режима (найти и отобразить все) и DirBranch - прекрасно работает плагин filex. так что придумывать что -то еще, нет смысла. Еще раз благодарю, за проделанную работу.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Безоконный вариант (удобно вызывать с клавиатуры):

Код: Выделить всё

' Выделение группы файлов/папок в соответствии с длиной имени файла/папки под курсором
' Необходима регистрация Script Helper ActiveX for TC
' Параметр: %N
'===============================================================
On Error Resume Next
N = WScript.Arguments(0)
With CreateObject("Scripting.FileSystemObject")
  Set CD = .GetFolder(CreateObject("WScript.Shell").CurrentDirectory)
  If .FileExists(N) Then
    For Each F in CD.Files
      If Len(F.Name) = Len(N) Then A = A  & vbnewline & F
    Next
  ElseIf .FolderExists(N) Then
    For Each F in CD.SubFolders
      If Len(F.Name) = Len(N) Then A = A  & vbnewline & F & "\"
    Next
  Else MsgBox "Установите курсор на файле или папке!", vbInformation
  End If
End With

With CreateObject("TCScript.Helper")
  T = .GetTextFromClip
  .SetTextToClip(A)
  .SendCommand 2033, True
  .SetTextToClip(T)
End With

Wscript.Quit
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Flasher писал(а):Безоконный вариант (удобно вызывать с клавиатуры):
Спасибо - вариант очень удобный!
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

В общем, посмотрел, вроде ничего сложного. Т.е. теперь работает и в режимах "без подкаталогов" и "файлы на панель" после поиска.

Код: Выделить всё

' Выделение группы файлов/папок в соответствии с длиной имени файла/папки под курсором
' Необходима регистрация Script Helper ActiveX for TC
' Параметры: %N "%P"
'===============================================================
On Error Resume Next
N = WScript.Arguments(0)
CD = WScript.Arguments(1)
If Err.Number > 0 Then 
  MsgBox "Установите курсор на файле или папке!", vbInformation
  Err.Clear
  Wscript.Quit
End If

Set FSO = CreateObject("Scripting.FileSystemObject")
With CreateObject("TCScript.Helper")
  T = .GetTextFromClip
  .LockTC True
  .SendCommand 524
  If FSO.FileExists(N) Then .SendCommand 3302, True
  If FSO.FolderExists(N) Then .SendCommand 3303, True
  .SendCommand 2018, True
  .SendCommand 524
  For Each F in Split(.GetTextFromClip, vbnewline)
    If Len(FSO.GetFileName(F)) = Len(FSO.GetFileName(N)) Then
      If Len(CD) > 0 Then
        A = A  & vbnewline & Mid(F,Len(CD)+1)
      Else A = A  & vbnewline & F
      End If            
    End If
  Next
  .SetTextToClip(A)
  .LockTC False
  .SendCommand 2033, True
  .SetTextToClip(T)
End With

Set FSO = Nothing
Wscript.Quit
Предыдущий вариант не заменяю, т.к. тот срабатывает побыстрее.
Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

Вот -это Скрипт, Отличная работа, Спасибо.
Flasher писал(а):Предыдущий вариант не заменяю, т.к. тот срабатывает побыстрее
Так ведь дело, не в скорости, а в функциональности! Да и потом, Я особой разницы, в скорости не заметил. Такой скрипт, может занять почётное место в коллекции инструментов Total Commander!
Ответить