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 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
shveicar



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

Post (Separately) Posted: Fri Jul 29, 2011 01:13    Post subject: Выделение файлов по кол-ву символов в их имени Reply with quote

Добрый вечер всем, на всякий случай - данная тема является продолжением темы выделенной по смыслу, в отдельный топик. Обсуждение:
Есть ли возможность написать скрипт, который выделяет файлы и папки в текущей панели Тotal commander исходя из длинны символов в их имени?
Flasher писал(а):
Quote:
Чисто из любопытства, примеры подобного удобства можно привести?
пожалуйста, вот фрагмент из файла списка
Code:
U:\klara\cdn.clara-g.com\CLARA-SHOW-D-013-1\Video\207CLARA-SHOW-D-013-1_video_640x368.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-D-013-1\Video\208CLARA-SHOW-D-013-1-1280x720.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-D-013-2\SplittedVideos\500CLARA-SHOW-D-013-2-part1.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-D-013-2\SplittedVideos\519CLARA-SHOW-D-013-2-part9.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-D-013-2\SplittedVideos\523CLARA-SHOW-D-013-2-part7.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-D-013-2\SplittedVideos\531CLARA-SHOW-D-013-2-part3.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-D-013-2\SplittedVideos\533CLARA-SHOW-D-013-2-part2.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-D-013-2\Video\498CLARA-SHOW-D-013-2_video_640x368.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-D-013-2\Video\499CLARA-SHOW-D-013-2-1280x720.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-E-008-1\SplittedVideos\390CLARA-SHOW-E-008-1-part4.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-E-008-1\SplittedVideos\392CLARA-SHOW-E-008-1-part3.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-E-008-1\SplittedVideos\394CLARA-SHOW-E-008-1-part2.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-E-008-1\SplittedVideos\396CLARA-SHOW-E-008-1-part1.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-E-008-1\SplittedVideos\626CLARA-SHOW-E-008-1-part9.wmv
U:\klara\cdn.clara-g.com\CLARA-SHOW-E-008-1\Video\382CLARA-SHOW-E-008-1_video_640x368.wmv
очевидно что файлы можно отсортировать, по числу символов в имене и удобно их выделить, а затем создать файл список.
Quote:
Кстати, это кол-во включает точку и расширение?
Это как вам удобней, при создании скрипта, если это не вызывает дополнительных трудностей, можно добавить. (тогда (.),(_),(-) тоже можно считать символом)[/mod]
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 01:30    Post subject: Reply with quote

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 01:37    Post subject: Reply with quote

Quote:
Вопрос в том, как производить подсчёт - по полному имени или по базовому?
Тогда, лучше по полному, да и потом, если будет окно, для ввода нужного количества символов, всегда можно соорентироваться в правильности выбора тех, или иных файлов.
Back to top
View user's profile Send private message
Rodny



Joined: 24 Jan 2007
Posts: 949
Location: Могилёв, Беларусь

Post (Separately) Posted: Fri Jul 29, 2011 01:55    Post subject: Reply with quote

Пока Flasher скрипт сочиняет, предлагаю альтернативное решение: сохранить поиск с плагином: "filex.Длина имени=...", вызывать кнопкой "LOADSEARCH имя_шаблона"
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 02:15    Post subject: Reply with quote

Спасибо Rodny - но только этот совет, помогает упростить первоначальную сортировку,(первоначальный список ведь может быть, весьма длинным) а скрипт создаваемый Flasher поможет, (я надеюсь) произвести детализацию, например группового переименования и т.д
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 03:34    Post subject: Reply with quote

Что-то вроде того (путь запуска очистить):
Code:
' Выделение элементов в файловой панели по числу символов в имени
' Необходима регистрация Script Helper ActiveX for TC
'===============================================
Types = InputBox("Введите 1/2, если требуются выделить файлы/папки:", "Выделение элементов списка по длине имён", "1")
Name = InputBox("Введите число символов:", "Выделение элементов списка по длине имён")
If Len(Name) = 0 Or Not IsNumeric(Name) Then WScript.Quit

With CreateObject("Scripting.FileSystemObject")
  Set CD = .GetFolder(CreateObject("WScript.Shell").CurrentDirectory)
  If Types = 1 Then
    For Each F in CD.Files
      If Len(F.Name) = Abs(Name) Then A = A  & vbnewline & F
    Next
  ElseIf Types = 2 Then
    For Each F in CD.SubFolders
      If Len(F.Name) = Abs(Name) Then A = A  & vbnewline & F & "\"
    Next
  Else MsgBox "Неверный ввод данных! Повторите попытку!", vbCritical
  End If
End With

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

Wscript.Quit


shveicar wrote:
чтобы создать затем файл список
Кстати, файл-список создать проще, чем выделить, и будет полноценно портабельный вариант.

Rodny wrote:
"filex.Длина имени=..."
Я сперва подумал, что так файлы и сортируются:
shveicar wrote:
файлы можно отсортировать
Back to top
View user's profile Send private message
Avada



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

Post (Separately) Posted: Fri Jul 29, 2011 07:55    Post subject: Reply with quote

shveicar
Попрошу впредь соблюдать правила русского языка хотя бы в заголовке темы, а также не выделять ссылки полужирным шрифтом — они и так отлично видны.
Соответствующие правки сделаны.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
MVV



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

Post (Separately) Posted: Fri Jul 29, 2011 09:52    Post subject: Reply with quote

А чем плох вариант выделения файлов с заданной длиной имени через банальное окно расширения выделения, вызываемое клавишей Num+? Или он слишком банален?

Code:
<^.{1,7}$

Добавляет к выделению все файлы с длиной имени от 1 до 7 символов (включая точку).
Code:
<^.{7,}$

Добавляет к выделению все файлы с длиной имени от 7 символов (включая точку). Если запятую убрать, то будут выделяться файлы с именами длиной ровно 7 символов.

Да и через упомянутое поле плагина, возвращающее длину имени, можно создать шаблон и использовать его в этом же окне выделения файлов. Правда, так нельзя будет менять числа на лету, в отличие от регулярного выражения.
_________________
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 11:34    Post subject: Reply with quote

Avada- Извиняюсь, на будущее учту.
Flasher- Спасибо скрипт работает, (просто и изящно)
Единственное, можно ли на базе, например этого скрипта
Code:
/* ====================================
   Подсчет количества выделенных файлов
   Параметры вызова из TC:
   %L
==================================== */
var objArgs, FSO, TextFile, i = 0;
objArgs = WScript.Arguments;
FSO = new ActiveXObject("Scripting.FileSystemObject");
TextFile = FSO.OpenTextFile(objArgs(0));
while (!TextFile.AtEndOfStream)
{
  i++;
  TextFile.SkipLine();
}
TextFile.Close();
WScript.Echo("Выделено " + i + " файлов");
(расширение .js) сделать скрипт дополняющий - Ваш вариант, подсчетом символов в имене файла. То-есть выделяем файл или папку, жмем кнопку, запускаем Ваш скрипт и после первого окошка-выбора папки или файла, сразу, во втором вводим нужное количество символов из буфера обмена, преобразованного с помощью скрипта в цифры, При автоматизации процесса, это было-бы очень удобно.
Quote:
Кстати, файл-список создать проще, чем выделить, и будет полноценно портабельный вариант
Конечно файл список- создать проще, но отфильтровать имена в нем, не всегда просто (для начала мешает знак \)и некоторые другие, моменты.
MVV
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 12:23    Post subject: Reply with quote

shveicar wrote:
во втором вводим нужное количество символов из буфера обмена
Зачем вводить (второе окно), если можно число из буфера уже в скрипте задействовать? Только я не понял, при чём тут приведённый js-скрипт? Его же подклеивать не надо, если речь только о буфере?
shveicar wrote:
Конечно файл список- создать проще, но отфильтровать имена в нем, не всегда просто (для начала мешает знак \)и некоторые другие, моменты.
Не понял насчёт знака. Где он мешает? Отфильтровать можно и в скрипте, смотря какая задача.
shveicar wrote:
Во первых, данный способ не позволяет выбрать режим выделения(файлы или папки), во вторых, выделяется все имена - в том числе и те, которые имеют меньшее количество символов. Ну а в третьих речь идёт именно об автоматизации процесса и экономии времени при работе с большим количеством информации, но тем не менее
Ну, способ, конечно, ещё тот, но свести к автоматизации тоже не проблема:
Code:
' Выделение элементов в файловой панели по числу символов в имени
'===============================================
Types = InputBox("Введите 1/2/3, если требуются выделить всё/файлы/папки:", "Выделение элементов списка по длине имён", "2")
If Not IsNumeric(Types) Then Call A
If Types > 3 Then Call A
Name = InputBox("Введите число символов:", "Выделение элементов списка по длине имён")
If Len(Name) = 0 Or Not IsNumeric(Name) Then WScript.Quit

With CreateObject("WScript.Shell")
  .Exec("%COMMANDER_PATH%\Utils\TCMC\TCMC.exe CM331"&Types)
  .SendKeys "<{^}.{{}"&Name&"{}}$~"
End With

WSCript.Quit

Sub A
  MsgBox "Неверный ввод данных! Повторите попытку!", vbCritical, "  Выделение элементов списка по длине имён"
  WScript.Quit
End Sub
Путь к TCMC должен соответствовать скриптовому.

Last edited by Flasher on Sat Jul 30, 2011 00:19; edited 2 times in total
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 14:02    Post subject: Reply with quote

Quote:
Зачем вводить (второе окно), если можно число из буфера уже в скрипте задействовать?
То есть вводить скопированное имя в окно скрипта? Кстати, последний вариант скрипта работать не хочет- все время выдает -что такие файлы не найдены ( причем пробовал водить в окне как готовое число так и имя).
Quote:
Не понял насчёт знака. Где он мешает?
Здесь, Я имел ввиду что после создания файла списка, удалить из него лишние строки не всегда просто(имеется ввиду вариант типа словогрыз, или textpipe) программам не нравится знак(\) понятно, что его можно в блокноте поменять везде на/ а потом обрабатывать, но даже после этого, часто программы удаляют массив блоков, вместо нужных строк. Как я понял при создании файла списка, -в моем случае(это кнопка)
Code:
TOTALCMD#BAR#DATA
%ComSpec%
/c type "%L" >"%T\1filelist.txt"
%COMMANDER_PATH%\ico\74.ico
Список файлов в противоположной панели(полный путь)

1
-1
в него добавляются, какие-то скрытые символы и сами строки идут непрерывно, без пробелов и переноса строк. Во всяком случае- аналогичный список(например извлечение url адресов) созданный с помощью скрипта или самого textpipe- обрабатывается без проблем.
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 14:26    Post subject: Reply with quote

shveicar wrote:
То есть вводить скопированное имя в окно скрипта?
Да - зачем?
На 2 вопроса я так ответа не получил...
shveicar wrote:
Кстати, последний вариант скрипта работать не хочет- все время выдает -что такие файлы не найдены ( причем пробовал водить в окне как готовое число так и имя).
При вводе текста скрипт закончит работу. Вводить надо число.
Насчёт "не хочет": в строке .SendKeystroke "^V~" если убрать "~", что будет в поле? Ещё такое окно может быть, если соотв. элементов с заданным числом символов нет в активной панели.
shveicar wrote:
удалить из него лишние строки не всегда просто(имеется ввиду вариант типа словогрыз, или textpipe) программам не нравится знак(\)
Ну так надо пользоваться софтом/скриптами, которые это умеют. Вообще я писал про скрипт создания файла-списка, в котором можно отфильтровать строки, убрать лишние символы и т.д. без всяких выделений файлов.
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 14:51    Post subject: Reply with quote

Quote:
Только я не понял, при чём тут приведённый js-скрипт?
Ну это я так привел, вдруг пригодится для создания нового скрипта.
Мой вопрос:
Quote:
То есть вводить скопированное имя в окно скрипта?
Ваш ответ:
Quote:
Да - зачем?
Я просто имел ввиду чтобы скрипт сам считал количество символов в выделенном имени, а как это реализовать -Вам видней.
Quote:
если убрать "~", что будет в поле?
После ввода количества символов выскакивает окно "добавить выделение" -"укажите маску файлов"(разделитель...) и в поле стоит буква V
Quote:
Ещё такое окно может быть, если соотв. элементов с заданным числом символов нет в активной панели.
Но предыдущий скрипт- ведь срабатывает! И кстати, интересно почему после первого срабатывания, первого скрипта
второй раз он уже не срабатывает(имеется ввиду после сброса выделенного), то -есть для повторного выделения других групп- приходится заново начинать поиск с маской(*.*) а только потом применять скрипт?
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 15:05    Post subject: Reply with quote

shveicar wrote:
После ввода количества символов выскакивает окно "добавить выделение" -"укажите маску файлов"(разделитель...) и в поле стоит буква V
Хм, стоит попробовать перед указаной строкой добавить:
Code:
  .Sleep 20

shveicar wrote:
Но предыдущий скрипт- ведь срабатывает!
Там последовательность цифр режима выделения другая. Может, не то вписывается?
shveicar wrote:
И кстати, интересно почему после первого срабатывания, первого скрипта
второй раз он уже не срабатывает(имеется ввиду после сброса выделенного)
Он должен срабатывать как с выделением, так и с его отсутсвием. Опять же можно поиграться со .Sleep N после .SetTextToClip(A).
shveicar wrote:
К сожалению, в моей коллекции такого нет.
Новая тема, новое ТЗ - пополнение колекции. Wink
Back to top
View user's profile Send private message
MVV



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

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

shveicar wrote:
MVV
Quote:
А чем плох вариант выделения файлов с заданной длиной имени через банальное окно расширения выделения
- Во первых, данный способ не позволяет выбрать режим выделения(файлы или папки), во вторых, выделяется все имена - в том числе и те, которые имеют меньшее количество символов. Ну а в третьих речь идёт именно об автоматизации процесса и экономии времени при работе с большим количеством информации, но тем не менее,- Спасибо.

Неужели!
Num+ выделяет только файлы, Shift+Num+ - файлы и папки соответственно. И в настройках есть опция, позволяющая выбирать, что именно будет выделять просто Num+, а что - Shift+Num+. Wink

А чтобы меньшее число символов не выделялось - я думал, что это очевидно - задай нижний и верхний предел длины равными, или используй вариант с точной длиной - я же разные варианты привёл. Выражение <^.{4,7}$ выделит имена с длиной от 4 до 7, выражения <^.{7,7}$ и <^.{7}$ - с длиной ровно 7 символов. В таком выражении символ < означает, что используется regex, символы ^ и $ - начало и конец имени, точка - любой символ, а выражение в скобках задает количество этих любых символов.

Вот насчет автоматизации - если лень набрать что-то на клавиатуре (или нужно выделять файлы для какой-то другой автоматизированной операции), то да, скрипт удобнее. А если нужно быстро выделить группу файлов с именами произвольной длины - то удобнее именно таким способом, т.к. не нужно ничего исправлять, а просто вписать нужное выражение. Которое, кстати, состоит всего из десятка символов. И которое поддерживается самим тоталом безо всяких дополнительных скриптовых систем и хелперов.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…


Last edited by MVV on Fri Jul 29, 2011 15:54; 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 1, 2, 3  Next
Page 1 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