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  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



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

Post (Separately) Posted: Fri Jul 29, 2011 15:54    Post subject: Reply with quote

MVV wrote:
Num+ выделяет только файлы, Shift+Num+ - файлы и папки соответственно.
А для папок ещё клавишу добавлять? Смысл?
MVV wrote:
Вот насчет автоматизации - если лень делать лишние клики, то да, скрипт удобнее.
Автоматизация - это не только ублажение лени, это ещё и ускорение процесса. Эти "клики" ещё и помнить надо ко всему прочему.
MVV wrote:
А если нужно быстро выделить группу файлов с именами произвольной длины - то удобнее именно таким способом, т.к. не нужно ничего исправлять, а просто вписать нужное выражение.
А где нужно что-то исправлять? Уж точно не удобнее, чем скриптами, что идут выше.
MVV wrote:
Которое, кстати, состоит всего из десятка символов.
Вот и подсчитай сколько уйдёт времени у простого юзера на вспоминание, вбитие этого десятка символов, когда в скрипте достаточно ввести всего 1-2 цифры.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Fri Jul 29, 2011 15:59    Post subject: Reply with quote

Если постоянно использовать чужие скрипты, ничего нового не узнаешьSmile а так, глядишь, и откроется что-то новое. Завтра понадобится выделять имена с длиной в некотором диапазоне, и придется переписывать скрипт, а тут уже всё работает, и не глючит))

Спорить ни с кем ни о чём не собираюсь, это личное дело каждого.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
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 16:00    Post subject: Reply with quote

Quote:
Хм, стоит попробовать перед указаной строкой добавить:
После добавления в скрипт "задержки" стало заметно, как сначала выскакивает окно (ввода количества символов.. с буквой V..)? а затем появляется сообщение, что файлы не найдены.
Quote:
Он должен срабатывать как с выделением, так и с его отсутсвием
Ну с этим, я разобрался,- проблема была в запущенной второй копией totala. (извиняюсь,- мой косяк).
MVV писал(а):
Quote:
Если постоянно использовать чужие скрипты, ничего нового не узнаешь
Если стоит цель научиться писать скрипты, - то лучше пойти на "курсы скрипто-писателей" А если речь идет о конкретной проблеме то для простого юзера проще воспользоваться плагином filex, чем создавать символьные комбинации. (без обид).

Last edited by shveicar on Fri Jul 29, 2011 16:15; edited 1 time in total
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 16:09    Post subject: Reply with quote

MVV wrote:
Если постоянно использовать чужие скрипты, ничего нового не узнаешь
Что на уме и использующего изветсно лучше ему самому. Скрипты можно использовать не только по назначению, но и как вспомогательный материал для реализации новых скриптов, в т.ч. и своих. За приведённой некогда литературой ко мне в личку обращаются именно с целью обучаться самостоятельно.
MVV wrote:
Завтра понадобится выделять имена с длиной в некотором диапазоне, и придется переписывать скрипт
А вот и не угадал. Во втором скрипте можно вписать числа в виде <Min>,<Max>, и будет тебе диапазон. Very Happy

shveicar wrote:
После добавления в скрипт "задержки" стало заметно, как сначала выскакивает окно (ввода количества символов.. с буквой V..)? а затем появляется сообщение, что файлы не найдены.
Странно, по логике с такой маленькой задержкой не должно быть видно. А разные значения подставлялись?
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 16:26    Post subject: Reply with quote

Quote:
Странно, по логике с такой маленькой задержкой не должно быть видно
Ну если так, тогда у меня проблемы со зрением. Rolling Eyes
Quote:
А разные значения подставлялись?
конечно - ведь первый вариант скрипта, при тех-же значениях срабатывает.
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 16:30    Post subject: Reply with quote

shveicar wrote:
Ну это я так привел, вдруг пригодится для создания нового скрипта.
Так вот я не могу понять, что этот скрипт должен из себя представлять - склеянный вариант или просто достаточно учесть число символов, которое он отправит в буфер?

shveicar wrote:
Ну если так, тогда у меня проблемы со зрением.
Имеется в виду, что с задержкой, что без неё - разницы визуально человек не должен ощутить. Это всего лишь 1/50 секунды.
shveicar wrote:
конечно - ведь первый вариант скрипта, при тех-же значениях срабатывает.
Вообще-то я про Sleep.
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 16:50    Post subject: Reply with quote

Flasher wrote:

Так вот я не могу понять, что этот скрипт должен из себя представлять - склеянный вариант или просто достаточно учесть число символов, которое он отправит в буфер?

Удобнее, (и главное, более быстро) будет - если учесть число символов, которое он отправит в буфер, сразу из выделенного имени файла.
Flasher wrote:

Вообще то я про Sleep
ну так я в обоих скриптах добавил это значение (на всякий случай отрывок из второго скрипта)
Code:
.SendCommand(331&Types)

.Sleep 20
Code:
.SendKeystroke "^V~"
если еще добавить время, например 80, то события, перечисленные мной выше- протекают ещё более плавно. Да и потом визуально, коды в обоих скриптах, сильно отличаются.

Last edited by shveicar on Fri Jul 29, 2011 17:28; edited 3 times in total
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 16:58    Post subject: Reply with quote

shveicar wrote:
Удобнее, (и главное, более быстро) будет - если учесть число символов, которое он отправит в буфер, сразу из выделенного имени файла.
Полностью ТЗ для скрипта можно увидеть? У меня пока в голове не укладывается, как из выделенного имени можно отправить число в буфер. К тому же из названия js-скрипта видно, что речь идёт о подсчёте кол-ва файлов. Как это кол-во относится к кол-ву символов выделяемых файлов мне тоже пока непонятно.

Касаемо задержки - похоже машина слабенькая. А если так?:
Code:
With CreateObject("TCScript.Helper")
  T = .GetTextFromClip
  .SetTextToClip("<^.{" &Name&"}$")
  .Pause = 40
  .SendCommand(331&Types)
  .Pause = 40
  .SendKeystroke "^V~"
  .SetTextToClip(T)
End With
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 19:53    Post subject: Reply with quote

Flasher wrote:
Полностью ТЗ для скрипта можно увидеть?

ТЗ- шаг №1 выбор типа выделяемых данных(1/2/3- все, файлы, папки) шаг №2 Копирование выделенного имени файла в буфер обмена с дальнейшей вставкой (преобразование с помощью скрипта имени в числовое значение) во второе поле (в данном случае - поле выделения нужного количества символов). шаг №3 выделение найденных данных. Согласен, с js-скриптом я привел пример немного не в тему. Но вот существует ведь скрипт Создание текстового файла с содержимым буфера обмена, Другое дело как их преобразовать в цифры? Видел также аналогичный скрипт, который присваивает создаваемому файлу имя из части содержимого, но опять-же это не цифры а символы. В-общем если проблема, слишком сложная, не стоит над ней ломать голову, в конце концов, можно и в ручную подсчитать эти злополучные символы. Спасибо за Помощь.
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 20:08    Post subject: Reply with quote

shveicar wrote:
Копирование выделенного имени файла в буфер обмена с дальнейшей вставкой (преобразование с помощью скрипта имени в числовое значение) во второе поле (в данном случае - поле выделения нужного количества символов)
Я же выше объяснил, что нет смысла использовать это поле. Тут буфер в принципе не нужен. Да, и что значит "преобразование имени в числовое значение"? Может, всё-таки простое вычисление длины имени?
И, как я понимаю, это уже не к ТЗ относится, а к идее реализации.
Пример ТЗ: по нажатию кнопки выделять файлы/каталоги, имеющие длину имён, равную длине имени файла/каталога под курсором.
Ничего не напутал?
shveicar wrote:
Другое дело как их преобразовать в цифры?
Кого - их?
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: Fri Jul 29, 2011 21:01    Post subject: Reply with quote

Flasher wrote:
Может, всё-таки простое вычисление длины имени?
Ну-можно и так сказать.
Flasher wrote:
ТЗ - это: по нажатию кнопки выделять файлы, имеющие длину имён, равную длине имени файла под курсором.
Ничего не напутал?
А что тут можно путать?
Flasher wrote:
Кого - их?
я имел ввиду символы(буквы, цифры,пробелы и другие знаки встречающиеся в именах)
Flasher wrote:
Как-то пограмотней мысли надо излагать
Буду стараться.
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 21:03    Post subject: Reply with quote

shveicar wrote:
А что тут можно путать?
Так не в моём примере путать. Так мой пример соответствует желаемому?
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 21:06    Post subject: Reply with quote

Конечно соответствует.
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 21:20    Post subject: Reply with quote

Удалить
Code:
Name = InputBox("Введите число символов:", "Выделение элементов списка по числу символов")
If Len(Name) = 0 Or Not IsNumeric(Name) Then WScript.Quit

Заменить в двух местах
Code:
      If Len(F.Name) = Abs(Name)
на
Code:
      If Len(F.Name) = Len(WScript.Arguments(0))

Прописать %N в параметрах.
Для новой кнопки не забыть очистить путь запуска.
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Fri Jul 29, 2011 22:15    Post subject: Reply with quote

Я пользуюсь таким скриптом, может поможет, если необходимо подправьте под себя
Code:
'========================   Описание   =======================================
' Выделяет папки\файлы по к-ву символов в именах, которое задаётся условием
' Выделяет так же в окне после поиска и при cm_DirBranch
'=======================  Дополнение =======================================
' Всвязи с проблемой Helpera (при большом к-ве файлов) использована утилита NirCmd.exe
' После обработки пути (имена) записываются в файл MarkerList.txt
' Это очень удобно, т.к. сохранённое выделение можно заново загрузить!!!
'========================  Параметры =======================================
' Может быть от 0 до 2-параметров
' {Условия поиска для выделения} {Файл список}
' Условий может быть три варианта (первый параметр)
'  =N    - выделяет файлы\папки, в именах которых N символов
'  <N    - выделяет файлы\папки, в именах которых меньше N символов
'  >N    - выделяет файлы\папки, в именах которых больше N символов
'========================    Примеры    ======================================
' без параметров  - выделяет все имена в текущей панели, в которых встречается условие, введённое в окне для ввода условия
'  <5                           - выделяет все имена в текущей панели, в которых меньше 5 символов
'  0 %L                       - выделяет все имена в выделенном, в которых встречается условие, введённое в окне для ввода условия
'  =6 %L                    - выделяет все имена в выделенном, в которых 6 символов
'
' Автор:             Аверин Андрей
' Версия:          1.0 (17.12.2010)

Option Explicit

Dim FSO, WSH, TCS, Num, Sym, Stroka, FF, ListFile, Name, Cnt, List, PathG, TextZ, Data, MZList, MyFile, Program, ln
Set TCS = CreateObject("TCScript.Helper")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = WScript.CreateObject("WScript.Shell")
'========================  Изменяемые пути  ===================================
   Program = GetPath("%COMMANDER_PATH%\NirCmd.exe")
   MZList = GetPath("%COMMANDER_PATH%\Files\Lists\MarkerList.txt")
'==========================================================================
TCS.LockTC True

If WScript.Arguments.Count = 2 Then
  Set ListFile = FSO.OpenTextFile(GetPath(WScript.Arguments(1)), 1)
  FF = ListFile.ReadAll
  if WScript.Arguments(0) = "0" Then
     MSBOXX
   Else
     Stroka = WScript.Arguments(0)
   End If
Else
   TCS.SendCommand ("cm_SelectAll")                           ' Выбираем всё
   WScript.Sleep 200                                                                    ' Пауза
  TCS.SendCommand ("cm_CopyFullNamesToClip") ' Копируем в буфер
  FF = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")
  TCS.SendCommand ("cm_ClearAll")
  if WScript.Arguments.Count = 1 Then
     Stroka = WScript.Arguments(0)
   Else
      MSBOXX
   End If
End If

PathG = TCS.GetSrcPath & "\"
Sym = Mid(Stroka,1,1)
Num = CInt(Replace(Stroka, Sym, ""))
Data = Split(FF, vbNewLine)

If UBound(Data) > 1 Then
   For Cnt = 0 To UBound(Data)
      Name = FSO.GetBaseName(Data(Cnt))
      ln = Len(Name)
      Select Case Sym
        Case "="
          if ln = Num Then TextW
        Case ">"
          if ln > Num Then TextW
        Case "<"
          if ln < Num Then TextW
        Case Else
          MsgBox "Введено неправильное условие для выделения" & vbNewLine &_
        "Повторите заново!" , vbOKOnly & vbCritical, "Выделение файлов по к-ву символов в имени"
        WScript.Quit
      End Select
   Next

  Set MyFile = FSO.CreateTextFile(MZList, True)       ' Создаём файл
         MyFile.Write(TextZ)                      ' Сохраняем выделение в файл
         MyFile.Close
  ' Вызываем NirCmd.exe для отправки текста в буфер
  WSH.Run Chr(34) & Program & Chr(34) & " " & "clipboard readfile " & Chr(34) & MZList & Chr(34) ,2,True
  TCS.SendCommand "cm_LoadSelectionFromClip", True  ' Выделяем из буфера
End if

Set WSH = Nothing
Set FSO = Nothing
Set TCS = Nothing
WScript.Quit

Sub MSBOXX
  Stroka = InputBox("Введите Условие поиска по к-ву символов в" & vbNewLine &_
  "именах файлов для дальнейшего выделения" & vbNewLine &_
  "Может быть 3 условия, Примеры:" & vbNewLine &_
  "=5  выделяются имена, в которых 5 символов" & vbNewLine &_
  "<5  выделяются имена, меньше 5 символов" & vbNewLine &_
  ">5  выделяются имена, больше 5 символов" , "Выделение файлов по к-ву символов в имени", "=8")
  if Stroka = "" Then
    MsgBox "Не введены условия для выделения!" & vbNewLine &_
    "Повторите заново!" , vbOKOnly & vbCritical, "Выделение файлов по к-ву символов в имени"
    WScript.Quit
  End If
End Sub

Sub TextW
  TextZ = TextZ & Replace(UCase(Data(Cnt)), UCase(PathG), "") & vbNewLine
End Sub

Function GetPath(pPath)
  GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function


Last edited by Andrey_A on Fri Jul 29, 2011 23:15; edited 1 time in total
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3  Next
Page 2 of 3

 
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