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

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Jul 29, 2011 01:13 Post subject: Выделение файлов по кол-ву символов в их имени |
|
|
Добрый вечер всем, на всякий случай - данная тема является продолжением темы выделенной по смыслу, в отдельный топик. Обсуждение:
Есть ли возможность написать скрипт, который выделяет файлы и папки в текущей панели Т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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Jul 29, 2011 01:30 Post subject: |
|
|
shveicar wrote: | очевидно что файлы можно отсортировать, по числу символов в имене и удобно их выделить, а затем создать файл список. | Примерно понятно, о чём речь. shveicar wrote: | Это как вам удобней, при создании скрипта, если это не вызывает дополнительных трудностей, можно добавить. | Тут моё удобство ни при чём. Расширение у файлов может иметь разное число символов. Вопрос в том, как производить подсчёт - по полному имени или по базовому? |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Jul 29, 2011 01:37 Post subject: |
|
|
Quote: | Вопрос в том, как производить подсчёт - по полному имени или по базовому? | Тогда, лучше по полному, да и потом, если будет окно, для ввода нужного количества символов, всегда можно соорентироваться в правильности выбора тех, или иных файлов. |
|
Back to top |
|
 |
Rodny

Joined: 24 Jan 2007 Posts: 949 Location: Могилёв, Беларусь
|
(Separately) Posted: Fri Jul 29, 2011 01:55 Post subject: |
|
|
Пока Flasher скрипт сочиняет, предлагаю альтернативное решение: сохранить поиск с плагином: "filex.Длина имени=...", вызывать кнопкой "LOADSEARCH имя_шаблона" |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Jul 29, 2011 02:15 Post subject: |
|
|
Спасибо Rodny - но только этот совет, помогает упростить первоначальную сортировку,(первоначальный список ведь может быть, весьма длинным) а скрипт создаваемый Flasher поможет, (я надеюсь) произвести детализацию, например группового переименования и т.д |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Jul 29, 2011 03:34 Post subject: |
|
|
Что-то вроде того (путь запуска очистить): 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 |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10415 Location: Россия, Саратов
|
(Separately) Posted: Fri Jul 29, 2011 07:55 Post subject: |
|
|
shveicar
Попрошу впредь соблюдать правила русского языка хотя бы в заголовке темы, а также не выделять ссылки полужирным шрифтом — они и так отлично видны.
Соответствующие правки сделаны. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Fri Jul 29, 2011 09:52 Post subject: |
|
|
А чем плох вариант выделения файлов с заданной длиной имени через банальное окно расширения выделения, вызываемое клавишей Num+? Или он слишком банален?
Добавляет к выделению все файлы с длиной имени от 1 до 7 символов (включая точку).
Добавляет к выделению все файлы с длиной имени от 7 символов (включая точку). Если запятую убрать, то будут выделяться файлы с именами длиной ровно 7 символов.
Да и через упомянутое поле плагина, возвращающее длину имени, можно создать шаблон и использовать его в этом же окне выделения файлов. Правда, так нельзя будет менять числа на лету, в отличие от регулярного выражения. _________________ TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel… |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Jul 29, 2011 11:34 Post subject: |
|
|
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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Jul 29, 2011 12:23 Post subject: |
|
|
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 |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Jul 29, 2011 14:02 Post subject: |
|
|
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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Jul 29, 2011 14:26 Post subject: |
|
|
shveicar wrote: | То есть вводить скопированное имя в окно скрипта? | Да - зачем?
На 2 вопроса я так ответа не получил...
shveicar wrote: | Кстати, последний вариант скрипта работать не хочет- все время выдает -что такие файлы не найдены ( причем пробовал водить в окне как готовое число так и имя). | При вводе текста скрипт закончит работу. Вводить надо число.
Насчёт "не хочет": в строке .SendKeystroke "^V~" если убрать "~", что будет в поле? Ещё такое окно может быть, если соотв. элементов с заданным числом символов нет в активной панели.
shveicar wrote: | удалить из него лишние строки не всегда просто(имеется ввиду вариант типа словогрыз, или textpipe) программам не нравится знак(\) | Ну так надо пользоваться софтом/скриптами, которые это умеют. Вообще я писал про скрипт создания файла-списка, в котором можно отфильтровать строки, убрать лишние символы и т.д. без всяких выделений файлов. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri Jul 29, 2011 14:51 Post subject: |
|
|
Quote: | Только я не понял, при чём тут приведённый js-скрипт? | Ну это я так привел, вдруг пригодится для создания нового скрипта.
Мой вопрос: Quote: | То есть вводить скопированное имя в окно скрипта? | Ваш ответ:
Я просто имел ввиду чтобы скрипт сам считал количество символов в выделенном имени, а как это реализовать -Вам видней.
Quote: | если убрать "~", что будет в поле? | После ввода количества символов выскакивает окно "добавить выделение" -"укажите маску файлов"(разделитель...) и в поле стоит буква V Quote: | Ещё такое окно может быть, если соотв. элементов с заданным числом символов нет в активной панели. | Но предыдущий скрипт- ведь срабатывает! И кстати, интересно почему после первого срабатывания, первого скрипта
второй раз он уже не срабатывает(имеется ввиду после сброса выделенного), то -есть для повторного выделения других групп- приходится заново начинать поиск с маской(*.*) а только потом применять скрипт? Quote: | Вообще я писал про скрипт создания файла-списка, в котором можно отфильтровать строки, убрать лишние символы и т.д. | К сожалению, в моей коллекции такого нет. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Jul 29, 2011 15:05 Post subject: |
|
|
shveicar wrote: | После ввода количества символов выскакивает окно "добавить выделение" -"укажите маску файлов"(разделитель...) и в поле стоит буква V | Хм, стоит попробовать перед указаной строкой добавить:
shveicar wrote: | Но предыдущий скрипт- ведь срабатывает! | Там последовательность цифр режима выделения другая. Может, не то вписывается?
shveicar wrote: | И кстати, интересно почему после первого срабатывания, первого скрипта
второй раз он уже не срабатывает(имеется ввиду после сброса выделенного) | Он должен срабатывать как с выделением, так и с его отсутсвием. Опять же можно поиграться со .Sleep N после .SetTextToClip(A).
shveicar wrote: | К сожалению, в моей коллекции такого нет. | Новая тема, новое ТЗ - пополнение колекции.  |
|
Back to top |
|
 |
MVV

Joined: 15 Oct 2009 Posts: 4815 Location: Ростов-Дон
|
(Separately) Posted: Fri Jul 29, 2011 15:31 Post subject: |
|
|
shveicar wrote: | MVV Quote: | А чем плох вариант выделения файлов с заданной длиной имени через банальное окно расширения выделения | - Во первых, данный способ не позволяет выбрать режим выделения(файлы или папки), во вторых, выделяется все имена - в том числе и те, которые имеют меньшее количество символов. Ну а в третьих речь идёт именно об автоматизации процесса и экономии времени при работе с большим количеством информации, но тем не менее,- Спасибо. |
Неужели!
Num+ выделяет только файлы, Shift+Num+ - файлы и папки соответственно. И в настройках есть опция, позволяющая выбирать, что именно будет выделять просто Num+, а что - Shift+Num+.
А чтобы меньшее число символов не выделялось - я думал, что это очевидно - задай нижний и верхний предел длины равными, или используй вариант с точной длиной - я же разные варианты привёл. Выражение <^.{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 |
|
 |
|
|
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
|