View previous topic :: View next topic |
Author |
Message |
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Sat Jul 09, 2016 19:19 Post subject: |
|
|
Здравствуйте. По работе со скриптом появилась пара вопросов.
1) Возможно ли расширить лимит знаков в поле параметров в настройках панели инструментов? Ныне этот лимит ограничен в 2048 символов, а этого мне теперь уже недостаточно. А если никак, то возможно ли чтобы скрипт работал с масками по списку в текстовом документе? Или например отредактировать скрипт и прямо в тексте скрипта вставить нужные маски?
2) Появилась теперь нужда узнать, какие маски часто встречаются в названиях находимых файлов и какие редко встречаются, то есть нужно определить какие маски наиболее "результативные", а какие - менее. Если этот скрипт определяет кол-ство файлов в таких-то папках, находимых по маскам, и сортирует в списке эти самые папки по кол-ству находимых файлов в них, то возможно ли отредактировать скрипт, чтобы он делал почти то же самое, но вместо названия папок скрипт теперь бы определял "рейтинг масок", где в списке наверху будут маски, по которым файлы наиболее находятся, а внизу будут идти маски, файлы по которым меньше всех находятся?
Спасибо. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Jul 09, 2016 20:13 Post subject: |
|
|
1) Первую половину можно писать в поле "Команда:" с ;" на конце, а второе поле начинать с ".
2) Возможно. Только нужно прояснить, найденные по маске файлы касаются всех структуры или каждой его папки в отдельности, как и сейчас? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Sat Jul 09, 2016 21:15 Post subject: |
|
|
Flasher
1) Ну получится втиснуть в лучшем случае масок на около 4000+ знаков. А мне нужно гораздо больше. Если я правильно понял о чем речь.
2) Quote: | Возможно. Только нужно прояснить, найденные по маске файлы касаются всех структуры или каждой его папки в отдельности, как и сейчас? |
Не совсем понятно. Если речь о том, что в папках есть файлы, которые дублируются в других папках, то они такие есть, но в малых количествах. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Jul 09, 2016 21:24 Post subject: |
|
|
Hjkma
1) Ясно. Тогда переносим параметр в код: под шапкой пишем
, а в 24 строке Filt вместо WScript.Arguments(0).
2. И чего с ними делать? Плюсовать - нет? Не ясен замысел. Как называются папки, содержащие файлы, знать не надо, а число файлов неизвестно в каких папках - надо? КПД тут в чём? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Sat Jul 09, 2016 21:42 Post subject: |
|
|
Flasher
1) Спасибо. Еще нужно узнать, как маски правильно разделяются, а то у меня выдало ошибку
Quote: | Строка: 8. Символ: 26. Ошибка: Предполагается наличие окончания инструкции |
2) Ну я ведь объяснил, мне нужно узнать самые "результативные" маски. То есть сколько файлов находятся по каким маскам. Если к примеру, маска "ресторан" находит 112 файлов, то хотелось бы, чтобы в списке это было показано как "ресторан" - 112 файлов. Также как в оригинальном скрипте, только вместо папок в выводимом списке - скрипт в этом списке сортирует сами маски.
апд.
Сами дублирующие файлы - можно плюсовать, проблем нет. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Jul 09, 2016 21:59 Post subject: |
|
|
Hjkma
1) Дело не в разделении. Пример 8 строки в студию.
2) Объясняю. Если бы дубликаты по маске имелись только в одиночных каталогах, то можно было бы имена папок оставить. Ежели нет, то колонка для имён папок, разумеется, будет лишней (хотя папки вполне можно перечислять через запятую). _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Sat Jul 09, 2016 22:06 Post subject: |
|
|
1)
Quote: | Filt = "*Melissa Clarke*";"*Mel Clarke*";"*Clarke*";"*Lucy Pinder*";"*Pinder*";"*Holly Peers*";"*Peers*";"*Lucy Vixen*";"*Lucy Collet*";"*lucy v*"; |
Это не все маски, тут только 8 строка
2) Ну имена папок оставлять не обязательно, достаточно только имена масок и кол-ство находимых при них файлов. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Jul 09, 2016 22:28 Post subject: |
|
|
1) Ну, здрасьте. А зачем внутренние кавычки? В шапке пример имеет только наружные. И ; на конце там совсем ни к чему.
Code: | Filt = "*Melissa Clarke*;*Mel Clarke*;*Clarke*;*Lucy Pinder*;*Pinder*;*Holly Peers*;*Peers*;*Lucy Vixen*;*Lucy Collet*;*lucy v*" |
Для того, чтобы было удобно редактировать, можно писать в несколько строк. Пример (в качестве разделителя для нового скрипта возьмём "|"):
Code: | Filt = "name.txt|name 1.txt|name 1*.txt|name *1.*|" &_
"2.txt|name2.txt|name 2.txt|name *2.txt|name 2*.*|" &_
"3.txt|name 3.*|name3.txt|name 4.txt|name *4*.txt" |
B в Sub-процедуре для новых условий меняем
Code: | Items.Filter 73920, WScript.Arguments(0)
If Items.Count Then
Dict.AddNew : Dict("Name") = FSO.GetFileName(Fold)
Dict("Count") = Items.Count
End If : Items.Filter 73888, "*" | на
Code: | For Each F in Split(Filt, "|")
Items.Filter 73920, F
If Items.Count Then
Dict.AddNew : Dict("Name") = F
Dict("Count") = Items.Count
End If
Next : Items.Filter 73888, "*" | Сам пока не тестировал. Хотя нет, тут кое-что ещё нужно. Сейчас... _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Sat Jul 09, 2016 23:06 Post subject: |
|
|
Flasher
Благодарю. Поменял маски на
Quote: | Filt = "*Melissa Clarke*;*Mel Clarke*;*Clarke*;*Lucy Pinder*" |
и сработал оригинальный скрипт. А разделитель "|" у меня не сработал, нету ни сообщений об ошибке, нету ничего. Оформлял в виде:
Quote: | "*Melissa Clarke*|*Mel Clarke*|*Clarke*|*Lucy Pinder*" |
Наверное в чем-то ошибся?
И в связи с этим проверить работоспособность новых условий не могу, если вношу изменения и у масок стоит разделитель "|", то совершенно ничего не происходит, а если стоит разделитель ";", то появляется ошибка
Quote: | Строка: 24 Символ: 3 Ошибка: Неопознанная ошибка |
А строка 24 у меня такая
Quote: | Set Items = ShAp.NameSpace(Fold).Items |
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Jul 10, 2016 01:59 Post subject: |
|
|
Мне пришлось отлучиться.
24 строка ранее указывалась относительно исходника. Поэтому вариант "у меня" не рассматривается. Новый разделитель касается нового задания (об этом же чётко написано!). Вот так будет выглядеть скрипт: Code: | '==============================================================================
' Создать список отсортированных по числу файлов в структуре активного каталога
' Условие: путь запуска - пустой
Option Explicit : Dim Filt, FSO, Dict, ShAp, RecS, Dir, K, File
'=========================== Маски файлов через "|" ===========================
Filt = "1?.*|*name*|name?.txt|name 1.txt|name 1*.txt|name *1.*|" &_
"*2*|2.txt|name2.txt|name 2.txt|name *2.txt|name 2*.*|name 2?.*" &_
"*3*.txt|name 3.*|name3.txt|name 4.txt|name *4*.txt|*5*|*5*.txt"
'==============================================================================
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dict = CreateObject("Scripting.Dictionary")
Set ShAp = CreateObject("Shell.Application")
Set RecS = CreateObject("ADODB.Recordset")
RecS.Fields.Append "Name", 200, 255
RecS.Fields.Append "Count", 139, 22
Dir = FSO.GetAbsolutePathName("")
Filt = Split(Filt,"|"): FFolder Dir
If Dict.Count Then
RecS.Open
For Each K in Dict.Keys
RecS.AddNew : RecS("Name") = K : RecS("Count") = Dict(K)
Next : RecS.Sort = "Count DESC" : Set Dict = Nothing
File = FSO.GetFileName(Dir) & ".csv"
FSO.CreateTextFile(File, 1, 1).Write RecS.GetString
ShAp.ControlPanelItem File : RecS.Close
End If
Sub FFolder(Fold)
Dim Items, F, Cnt
Set Items = ShAp.NameSpace(Fold).Items
For Each F in Filt
Items.Filter 73920, F : Cnt = Items.Count
If Cnt Then
If Not Dict.Exists(F) Then Dict.Add F, Cnt _
Else Dict.Item(F) = Dict.Item(F) + Cnt
End If
Next : Items.Filter 73888, "*"
For Each F in Items : FFolder F : Next
End Sub |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Wed Jul 13, 2016 22:55; edited 6 times in total |
|
Back to top |
|
|
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Sun Jul 10, 2016 02:52 Post subject: |
|
|
Flasher
Опять что-то пошло не так. Выскакивает окно ошибки
Quote: | Строка: 27 Символ: 30 Ошибка: В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру |
Вот эта строка, на которую скрипт ругается
Quote: | Num = Dict.Item(F) : RecS(Num) = CLng(RecS(Num)) + Items.Count
|
Пробовал так и эдак вставлять маски, все равно та же ошибка. Даже попробовал скопировать код скрипта как есть, не меняя в нем ничего и создал в одном папке текстовый файл "name 1.txt", все равно вызывается то же окно ошибки. Ну ладно, пойду спать, может завтра день будет мудренее. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Jul 10, 2016 03:08 Post subject: |
|
|
Hjkma
Видел ошибку. Дело не в масках. У себя вроде исправил, но что-то счётчик криво подсчитывает. Немного покумекаю.
Add: Прежняя затея оказалась опрометчивой, сделал в 2 прохода. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Sun Jul 10, 2016 14:35 Post subject: |
|
|
Flasher
Все работает. Правда что-то оно долго считает - на папку с 55+ тыс. файлов с заданными масками на 20 тыс. знаков скрипт затратил 1 час. А впереди еще папка с 300 тысяч. файлов... Ну ничего, главное работоспособность. Спасибо за вашу помощь, очень ценю ваше время и силы, которые вы затрачиваете на добровольную помощь. Долгих вам лет, хорошего здоровья и удачи во всех делах! Вы хороший человек. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Jul 10, 2016 16:46 Post subject: |
|
|
Hjkma
Долго, т.к. каждая папка дёргается 2000+ раз при таком числе масок. Я немножко ускорил, но не думаю, что это существенно облегчит процесс. Другим вариантом может стать пофайловый перебор с вхождениями вместо масок, тогда дёргания будут однократными, но вот уже коллекция будет дёргаться вдвое больше числа файлов. Возможно, при таком числе вхождений это может значительно повысить скорость.
Спасибо за добрые слова! _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Hjkma
Joined: 18 Apr 2015 Posts: 178
|
(Separately) Posted: Wed Jul 13, 2016 21:46 Post subject: |
|
|
Flasher
Новый исправленный скрипт у меня выдает ошибку:
Quote: | Строка: 17 Символ: 14 Ошибка: Предполагается наличие 'Then' |
Маски задал ровно те же самые, при которых работает предыдущий вариант скрипта, путь запуска задан пустой, но вызывается только эта ошибка.
Строка 17, на что ругается скрипт, вот эта
|
|
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
|