[wdx] WinScript Advanced Content Plugin (x86\x64) (new)
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Плагины Total Commander

#1: [wdx] WinScript Advanced Content Plugin (x86\x64) (new) Author: Gentoo69 PostPosted: Wed May 18, 2016 23:35
    —
WinScript Advanced
(c) Alex Shy, 2016 (= автор топика)

Тема на оффоруме

Контентный плагин WinScriptAdv запускает скрипты для каждого файла и папки и возвращает результат работы скрипта (строку) в колонки.
Вы можете писать скрипты для получения любой полезной информации из файла/папки или парсить имя для сортировки в требуемом порядке, переименования в инструменте группового переименования и т.д.

Вы можете активировать неограниченное количество скриптов в одной группе колонок (в одной панели) - они будут работать совместно.

Скрин 1
Скрин 2
Скрин 3

Возможности:

* До 21 колонки в одном скрипте
* Неограниченное количество совместно работающих скриптов (по 21 колонке на скрипт) в одной группе колонок
* Возможность изменять заголовки колонок
* Поддерживаемые языки:
см. рабочие примеры скриптов в папке Scripts.

* Возможность устанавливать собственные скриптовые движки, указав путь к exe интерпретатора.
* Стабильный и быстрый
(быстрый в случае использования языков через COM - VBS, JS, Python, языки, которые работают через exe парсер - заметно медленнее)
* С открытым исходным кодом (Delphi XE8) - будет открыт в ближайшее время

Полностью совместим со скриптами, созданными для плагина script_wdx (автор Lev Freidin, wincmd.ru и totalcmd.net), у вас нет необходимости исправлять их: скрипты для WinScriptAdv имеют тот же формат - переменная с именем "filename" и переменные с результатом content, content1, content2, ... content20 (всего 21).

 Полезные скрипты (идут вместе с плагином):


Скачать:
http://wincmd.ru/plugring/WinScriptAdv.html

Ваши предложения, сообщения о найденных ошибках, новые скрипты пожалуйста отправляйте в эту тему или в соседнюю.

**
Вы можете добавить все имеющиеся скрипты в раздел
[Script]
ActiveScripts=
Это не повлияет на производительность, т.к. скрипты запускаются только если колонка активна в ТС.

После этого можно добавить нужные колонки с разными скриптами и создать группы колонок, а затем легко переключаться между ними (нажав правую кнопку мыши в TC по колонке и выбрав в меню нужную группу колонок)


Last edited by Gentoo69 on Thu Sep 01, 2016 18:40; edited 6 times in total

#2:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 03:42
    —
О как. Предчуствие не обмануло, коль затягивал с выкладкой. Что называется, кто не успел, тот опоздал. Smile
Skif_off более полноценный и грамотно оформленный перевод скидывал с описаниями. Перенаправил в ЛС.

Вопросы вероятно появятся после некоторых тестов.


Last edited by Flasher on Thu May 19, 2016 17:01; edited 1 time in total

#3:  Author: Gentoo69 PostPosted: Thu May 19, 2016 04:26
    —
Flasher wrote:
О как. Предчуствие не обмануло, коль затягивал с выкладкой. Что называется, кто не успел, тот опоздал. Smile
Skiff_off более полноценный и грамотно оформленный перевод скидывал с описаниями. Перенаправил в ЛС.

Вопросы вероятно появятся после некоторых тестов.

Обновил описание, спасибо Skiff_off и Flasher.

Инфу по поводу создания скриптов убрал из шапки форума в Readme (на англ.), кроме того, там содержится один ньюанс для скриптов, которые работают с exe парсерами напрямую (и только для них!) - нужно выводить результаты переменных content, content1 итп. в StdOut (в консоль).
(все это есть в примерах скриптов в папке Scripts, т.е. в принципе ридми можно и не читать Smile - а сразу брать тестовый скрипт нужного разрешения и на его основе делать то, что Вам необходимо).

#4:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu May 19, 2016 08:11
    —
Gentoo69
Шапка темы приведена в несколько более компактный вид. Дубль в "Автоматизации" удалён как нарушающий правила форума.

#5:  Author: RodnyLocation: Могилёв, Беларусь PostPosted: Thu May 19, 2016 17:06
    —
Gentoo69
Не нужно файл в дистрибутиве называть options.ini, пускай он будет что-нибудь вроде options.ini.sample. А то при обновлении он затирает имеющийся файл.

#6:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 18:02
    —
Gentoo69
Отдельное спасибо за extensions и возврат значений из процедур! Теперь от лишнего кода можно избавиться.
1. Просьба ввести ключ 2 (только папки) для FoldersPaths.
2. У SCP была возможность обновлять возращаемые с обновлённым кодом поля без перезапуска ТС. Есть возможность осуществить?
3. Можно ли рассчитывать в будущем на ключ для пути к интерпретатору (без костылей с StdOut)?
4. В ReadMe перевод на русский хотелось бы. Строки снизу там лишние. И Alt+Backspace в AkelPad нажать не помешает.

#7:  Author: Skif_off PostPosted: Thu May 19, 2016 18:13
    —
Flasher
2. cm_UnloadPlugins, а потом cm_LoadAllOnDemandFields? Блин, а я перезапускал Smile

#8:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 18:30
    —
Skif_off
Это-то понятно. Но я панель по Esc обновляю.

#9:  Author: Skif_off PostPosted: Thu May 19, 2016 19:02
    —
Flasher
cm_RereadSource?

#10:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 19:06
    —
Skif_off
Почти. 540,524.

#11:  Author: Gentoo69 PostPosted: Thu May 19, 2016 19:13
    —
Flasher
Quote:
1. Просьба ввести ключ 2 (только папки) для FoldersPaths.

Ok.

Quote:
2. У SCP была возможность обновлять возращаемые с обновлённым кодом поля без перезапуска ТС. Есть возможность осуществить?

2.1 Закрыть > открыть TC это ж занимаем секунды.
2.2 По идее в options.ini придется не часто ходить (только во время добавления нового скрипта), один раз забрасываем все скрипты, прописываем их все в ActiveScripts (это не влияет на производительность, скрипты запускаются только если колонка видимая), далее включаем или отключаем их через TC - например можно создать группы нужных скриптов (т.е. колонок) и переключаться между ними в ТС (правая кнопка мыши по колонке).

3.
Quote:
Можно ли рассчитывать в будущем на ключ для пути к интерпретатору?

Сейчас уже можно указать путь к любому интерпретатору в секции, к примеру копипаста из options.ini:

[ExeScriptParsers]
php=c:\php\php.exe
phpVarFormat=$filename='%s';
phpDoubleSlashPath=0

Quote:
Можно ли рассчитывать в будущем на ключ для пути к интерпретатору, без костылей с StdOut [из скрипта]?

А как тогда получать результаты от скрипта в таких парсерах?
К примеру для php скрипта в конце кода нужно написать:

echo $content;
или
echo $content;
echo $content1;

...
Разве что плагин сам добавит эти строчки в скрипт.
Хм, а это идея, надо подумать.
Я правильно вас понял - т.е. суть в унификации - чтобы и vb\js\python (у них не нужно в скриптах выводить результаты на консоль, переменная читается напрямую через COM) и php имели один стандарт написания, чтобы не путаться?

Quote:
4. В ReadMe перевод на русский хотелось бы.

Я за плагин смогу взяться только через пару недель, там еще PowerShell на очереди, так что если можете помочь с переводом ReadMe - это было бы прекрасно.

Quote:
Строки снизу там лишние.

Это не баг, а фича Very Happy - чтобы текст в конце файла можно было проскролить на середину экрана, а не направлять глаза и голову вниз монитора (на больших мониторах)


Last edited by Gentoo69 on Thu May 19, 2016 19:22; edited 2 times in total

#12:  Author: StaniclawLocation: Ташкент PostPosted: Thu May 19, 2016 19:18
    —
Gentoo69 wrote:
2.1 Закрыть > открыть TC это ж занимаем секунды.
А если открыта вкладка с результатами поиска?

#13:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 19:32
    —
Gentoo69
2.1 Для тестов это крайне неприятная необходимость, когда проверка может возникать в минуту по неск. раз.
3. Та-ак. Я не обновился просто. В описании нигде не увидел. Теперь вижу. Тогда пойду смотреть. По идее и унификации всё верно.
4. Помочь не проблема, если кто-то не опередит. Там немного. Первый раз встречаюсь с фичей, но хозяин-барин. Но концевые пробелы вряд ли фича. Wink

#14:  Author: Skif_off PostPosted: Thu May 19, 2016 19:53
    —
Gentoo69
Писал про #include <WinAPIFiles.au3>, прошу прощения, я был неправ: не заметил, что вы там используете константу $FO_READ
Code:
Local $hFileOpen = FileOpen($filename, $FO_READ)

(Обычно пишут числа и до 3.3.10.0 в документации в описании и примерах тоже писали сразу числа, хотя в 3.3.8.1 эти константы уже были.)

Проще записать в виде
Code:
Local $hFileOpen = FileOpen($filename, 0)

чтобы не тянуть include всего лишь из-за одной строки "Global Const $FO_READ = 0". В принципе, знакомый с AutoIt поймёт в чем дело, но я вас подвёл ненароком - из коробки пример стал нерабочим, ещё раз прошу прощения.

#15:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 20:01
    —
Gentoo69
3. Что-то у меня не получилось.
Code:
[ExeScriptParsers]
vbs=%COMMANDER_PATH%\Scripts\Parsers\wscript.exe
vbsVarFormat=filename="%s"
>>No data from script.

И да, было бы здорово указывать его отдельно для секций ActiveScripts, а не всех скриптов заданного расширения подряд.

#16:  Author: Gentoo69 PostPosted: Thu May 19, 2016 20:10
    —
Flasher wrote:
Gentoo69
2.1 Для тестов это крайне неприятная необходимость, когда проверка может возникать в минуту по неск. раз.


Имхо писать и тестить скрипт лучше где-то вне плагина, вы сохраните кучу времени.
Через cmd.exe или через спец. консоль\редактор (как у AutoIt, или AutoHotKey)
Просто добавить в начале скрипта

$filename = "D:\test.txt"
(указать переменную filename c путем к файлу)
и можно запускать.

А потом когда подключаете скрипт к плагину - закомментировать эту строчку.

------------------------------------
Quote:
3. Что-то у меня не получилось. <...>
>>No data from script.

No data from script - означает что не пришло ничего в StdOut (вы не выводили результаты на консоль). При использовании скриптов через exe парсеры - те что указаны в [ExeScriptParsers]) - нужно выводить в конце скрипта результат на консоль. (чуть позже это надо наверное убрать, т.е. в след. версиях эти строчки плагин будет добавлять автоматом в скрипт)
Для Vbs
Проверьте на cmd.exe


Но честно говоря не пойму зачем это нужно для vbs - ведь скрипт получиться медленнее, если прогонять его через exe парсер (wscript.exe), чем через встроенный VBS через COM.
Или это просто тест?


Last edited by Gentoo69 on Thu May 19, 2016 20:26; edited 1 time in total

#17:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 20:25
    —
Gentoo69 wrote:
Имхо писать и тестить скрипт лучше где-то вне плагина, вы сохраните кучу времени.
Раньше тестил SCP, всё быстро и удобно. Нажал одну кнопку, увидел результат. Вне плагина нет смысла, т.к. по-разному контент и debug возвращается, что обычно и нужно смотреть.
3. Без консоли (сразу в колонку) нельзя реализовать? Я как раз об этом просил.
Gentoo69 wrote:
Но честно говоря не пойму зачем это нужно для vbs - ведь скрипт получиться медленнее, если прогонять его через exe парсер
Не зачемал особо, что медленней (если не брать костыль с потоком). Зачем - для сторонних dll-ок типа TCHelper.

#18:  Author: Gentoo69 PostPosted: Thu May 19, 2016 20:57
    —
Flasher wrote:

Раньше тестил SCP, всё быстро и удобно. Нажал одну кнопку, увидел результат. Вне плагина нет смысла, т.к. по-разному контент и debug возвращается, что обычно и нужно смотреть.

В WinScriptAdv для языков Vbs, Js и Python используется та же система что и в SCP - скрипт отправляется движку через COM интерфейс. Этот интерфейс позволяет заглядывать в переменные - получать их содержимое.
Т.е. если используете VBS, Js и Python - никакой разницы быть не должно.

Quote:
вне плагина нет смысла, т.к. по-разному контент и debug возвращается,

Должно быть одинаково (или я не понял просто о чем речь).
__________________________________

Если вы используете другие языки, то в них скрипт подается через вызов exe интерпретатора, т.е.:

1. Формируется скриптовый файл, он сохраняется в temp папке.
2. Вызывается exe с параметром - путь к этому файлу скрипту.
3. Читаем результат из StdOut (консоль грубо говоря).

Поэтому такие скрипты должны в конце писать результаты в консоль (StdOut) - возможно в следующих версиях это поменяется.

__________________________________

Расширения скриптов которые указаны в [ExeScriptParsers] - такие скрипты должны возвращать результат в консоль.

Сейчас это ahk, php и au3.

Если вы добавите туда vbs - то все vbs скрипты будут выполняться через указанный парсер (я не проверял, но скорее всего так).

Лучше так не делать, т.к. vbs скрипты работают быстрее через COM, да и не будут работать уже имеющиеся vbs скрипты - т.к. в них нет кода на вывод результатов на консоль.
Лучше закинуть туда другое расширение - например *.vb (правда не знаю подхватит ли его парсер wscript.exe).

Если же расширения не указаны в [ExeScriptParsers] - то в скриптах этих файлов в консоль ничего не нужно возвращать - плагин прочитает их содержимое переменных через COM (сейчас это Vbs, Js и Python).

#19:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 21:17
    —
Gentoo69 wrote:
никакой разницы быть не должно.
Разница в случае SCP в отсутствии необходимости перезапускать ТС, достаточно обновить панель. Я, собственно, повторяюсь.
Gentoo69 wrote:
Должно быть одинаково (или я не понял просто о чем речь).
Визуальная проверка скорости отображения, возможность возврата (на примере с Sub в SCP), проблема с переполнением буффера памяти (это я не проверял) и т.п.
Gentoo69 wrote:
Лучше так не делать, т.к. vbs скрипты работают быстрее через COM, да и не будут работать уже имеющиеся vbs скрипты - т.к. в них нет кода на вывод результатов на консоль.
Лучше - это не к функционалу vbs, а к функционалу плагина. Мне же первое требуется. vb никак тут не годится. Придумайте, что-нибудь без StdOut.

#20:  Author: Gentoo69 PostPosted: Thu May 19, 2016 21:47
    —
Flasher wrote:

Разница в случае SCP в отсутствии необходимости перезапускать ТС, достаточно обновить панель. Я, собственно, повторяюсь.

Что такое обновить панель? F2 что-ли?
Т.е. вы изменяете скрипт нажимаете F2 и принимаете новый результат?

В WinScriptAdv для скорости текст скрипта грузиться из файла в память только один раз при старте, после этого он оптимизируется (удаляются комменты, пустые строки итп) и далее отдается только из памяти.
Дальше, при нажатии F2 значения не поменяются, т.к. используется кэш для всех файлов в текущей открытой папке, опять же для оптимизации (т.к. TC может запрашивать одну колонку для всех файлов, а затем остальные колонки повторно для тех же файлов - т.е. кэш нужен чтобы скрипт не выполнялся больше 1 раза для одного файла. ).
SCP этого не делает.

Можно сделать что-то типа Debug опции в ini файле, который отключит все это.

Flasher wrote:
Лучше - это не к функционалу vbs, а к функционалу плагина. Мне же первое требуется. vb никак тут не годится. Придумайте, что-нибудь без StdOut.

Без StdOut возможно сделаю к следующей версии.
Вы опишите для чего нужно ставить другой vbs движок, может мы что-нибудь другое придумаем.
Что такое TCHelper и почему для него нужно пропускать vbs скрипт через exe парсер wscript, почему не достаточно стандартного vbs движка через COM?

#21:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 21:59
    —
Gentoo69 wrote:
Т.е. вы изменяете скрипт нажимаете F2 и принимаете новый результат?
Или Ctrl+R. Да, новый.
Gentoo69 wrote:
SCP этого не делает.
Я это понимаю. Но, допустим, мне нужно вернуть/учесть индекс файла в панели с каждой сменой сортировки. И что, мне для этого каждый раз перезапускать ТС?
Gentoo69 wrote:
Можно сделать что-то типа Debug опции в ini файле, который отключит все это.
А совместное использование нельзя реализовать? Т.е. для секций, где это требуется, при поставновке значения нового ключа кэш не действует.
Gentoo69 wrote:
Вы опишите для чего нужно ставить другой vbs движок, может мы что-нибудь другое придумаем.
Я ж описал. Для пользования сторонними библиотеками.
Gentoo69 wrote:
Что такое TCHelper и почему для него нужно пропускать vbs скрипт через exe парсер wscript, почему не достаточно стандартного vbs движка через COM?
Линк.

Last edited by Flasher on Fri May 20, 2016 10:22; edited 1 time in total

#22:  Author: Gentoo69 PostPosted: Thu May 19, 2016 22:34
    —
Flasher wrote:
Но, допустим, мне нужно вернуть/учесть индекс файла в панели с каждой сменой сортировки. И что, мне для этого каждый раз перезапускать ТС?

Индекс файла из списка файлов TC?
Нет он тоже поменяется (Если я правильно понял о каком индексе речь идет.), кэшируются только результаты работы скриптов WinScriptAdv для конкретных файлов, из текущей директории.

Чтобы скрипт выполнился повторно, нужно выйти из текущей папки и зайти в нее снова (правда скрипт не загрузится из файла снова).

Flasher wrote:
Я ж описал. Для пользования сторонними библиотеками.

Ну ок, это примерно понятно.
Задам вопрос по другому, а если не менять vbs движок на wscript.exe (в смысле вообще vbs не добавлять в [ExeScriptParsers]), а использовать встроенный в WinScriptAdv - что будет? (или вы его меняли просто для теста?)
Я просто пытаюсь понять что нужно изменить в плагине, возможно добавить новую функцию конкретно для ваших целей.

#23:  Author: FlasherLocation: Москва PostPosted: Thu May 19, 2016 22:44
    —
Gentoo69 wrote:
правда скрипт не загрузится из файла снова
В этом и проблема. Насчёт индекса уже понял, что поспешил с примером.
Gentoo69 wrote:
а если не менять vbs движок на wscript.exe
Толку от этого точно не прибавится.
Gentoo69 wrote:
возможно добавить новую функцию конкретно для ваших целей
Нужно, чтобы вместо встроенного wscript.exe выпонялся указанный для получения данных с помощью незарегистрированных dll.

#24:  Author: Gentoo69 PostPosted: Fri May 20, 2016 00:16
    —
Flasher

Понятно. Чтобы использовать его в автономных сборках ТС - вам надо было эту ключевую фразу сказать. Ведь запуск скриптов может быть заблокирован в системе кстати - есть такой параметр где то в груп. политике.
Ок, если этот незарегистрированный wscript.exe работает под cmd.exe (тут сам cmd не причем, имеется в виду вообще в винде), то он будет работать и в плагине без проблем.

Проблема только с stdOut.
В следующей версии уберу вывод на консоль в таких скриптах, WriteToStdOut будет ставиться автоматом в конец скрипта.
Придется добавить еще один параметр в ini где будет формат строки для вывода на консоль типа:

vbsStdOutWriteLine=Wscript.Echo("%s")

Итого получим, если используется скрипт (для любого языка) через COM - скрипт остается как есть, если через парсер - плагин автоматом добавляет вывод на консоль переменных "content".

 !  Avada:
Оверквотинг на форуме запрещён! Ненужное избыточное цитирование предыдущих сообщений убрано. Кроме того, пустые строки после цитат добавляются автоматически, ставить их вручную и раздувать размер постов не нужно.

#25:  Author: FlasherLocation: Москва PostPosted: Fri May 20, 2016 07:53
    —
Gentoo69 wrote:
Ведь запуск скриптов может быть заблокирован в системе кстати - есть такой параметр где то в груп. политике.
Про параметр я знаю. Есть и другой более известный ключ в реестре. Но это совсем другая песня. Тут уже ничего (кроме автоправки ключей) не поделать. Автономный wscript работать так же не будет. Это может помочь только для изменённой системной ассоциации в том же реестре. Но там есть ещё около 20 других зависимостей, некоторые из которых легко создадут проблемы выполнения. В моём же случае суть не в wscript, а именно в dll. Вот почему я прошу сделать ключ для скриптовых секций, а не только секции интерпретатора.
Gentoo69 wrote:
если через парсер - плагин автоматом добавляет вывод на консоль переменных "content"
А что значит "на консоль"?

#26:  Author: Gentoo69 PostPosted: Fri May 20, 2016 14:38
    —
Flasher wrote:
А что значит "на консоль"?
Плагин прочитает в ини файле формат строки для вывода на консоль для текущего языка:
vbsStdOutWriteLine=Wscript.Echo(%s)

(Это как пример, т.к. там скорее всего Wscript.Echo не подойдет.)
И вставит эту строку в конце скрипта с названиями используемых переменных:

Wscript.Echo(content)
Wscript.Echo(content1)

А потом скормит этот скрипт парсеру.
Итого получим, если используется скрипт (для любого языка) через COM - скрипт остается как есть, если через парсер - плагин автоматом добавляет вывод на консоль переменных "content".
В обоих случаях код скрипта, который редактирует юзер будет одинаковый.

#27:  Author: FlasherLocation: Москва PostPosted: Fri May 20, 2016 16:05
    —
Gentoo69
Я почему спросил. Вывод на консоль возможен только в случае CScript, а не WScript. Поэтому я не пойму, как плагин перехватит вывод окна, не дав ему появиться.

#28:  Author: Gentoo69 PostPosted: Fri May 20, 2016 17:45
    —
Flasher

Ну да, для плагина и нужно использовать CScript.
Т.к. WScript не поддерживает StdOut, а плагин в свою очередь не работает с окнами (все окна будут невидимые).

Тут пишут
http://stackoverflow.com/questions/4388879/vbscript-output-to-console

WScript.Echo -
If you run that under wscript.exe (the default handler for the .vbs extension, so what you'll get if you double-click the script) you'll get a "MessageBox" dialog with your text in it.
If you run that under cscript.exe you'll get output in your console window.

#29:  Author: FlasherLocation: Москва PostPosted: Fri May 20, 2016 18:05
    —
Gentoo69 wrote:
Т.к. WScript не поддерживает StdOut
Как же?
Code:
Content = "Test"
WScript.StdOut.Write Content

#30:  Author: Gentoo69 PostPosted: Fri May 20, 2016 18:17
    —
Flasher wrote:
Как же?
Code:
Content = "Test"
WScript.StdOut.Write Content
Выбивает ошибку - Handle Invalid. Запускаю под cmd.exe.

И вот так тоже будет писать ошибку
Code:
Set fso = CreateObject ("Scripting.FileSystemObject")
Set stdout = fso.GetStandardStream (1)
stdout.WriteLine "This will go to standard output."

#31:  Author: FlasherLocation: Москва PostPosted: Fri May 20, 2016 18:21
    —
Gentoo69
Если в мой код добавить строку
Code:
WScript.Echo WScript.StdIn.ReadLine
и выполнить от cscript, то увидим результат. Значит, запись есть. Т.е. программно вытащить поток как-то можно.

#32:  Author: Gentoo69 PostPosted: Fri May 20, 2016 18:31
    —
Flasher
Quote:
Значит, запись есть. Т.е. программно вытащить поток как-то можно.

Через Cscript можно и вытащить и втащить в консоль.
Через Wscript - не получается и судя по комментам на sw ни у кого еще не получилось.
Они и называются W - Windows, C - console.

Если выполнить от cscript, то дальше можно не заморачиваться,
wscript.Echo - будет выносить текст в консоль.

#33:  Author: FlasherLocation: Москва PostPosted: Fri May 20, 2016 18:32
    —
Gentoo69
Понятно, но нам то нужен Wscript. Или консоль скрытая будет?
Если да, то можно и CSсript, там только букву в имени и тексте манифеста поправить.

#34:  Author: Gentoo69 PostPosted: Fri May 20, 2016 18:39
    —
Flasher wrote:
Понятно, но нам то нужен Wscript.

Имхо по идее cscript будет работать также с этими незарегистрированными дллками. Если Wscript может работать отдельно, значит и сscript будет работать отдельно.

Пишите в личку, этот вопрос не совсем к теме плагина.
Если не будет работать, что нибудь придумаем.

#35:  Author: FlasherLocation: Москва PostPosted: Fri May 20, 2016 18:45
    —
Gentoo69
Я выше вопрос задал.

#36:  Author: Gentoo69 PostPosted: Sat May 21, 2016 00:32
    —
Обновление
v1.5: 21 May, 2016
***
Исправлен крэш, если в vbs файлах использовались определенные объекты, такие как :
set xmlDoc = CreateObject("MSXML2.DOMDocument")
или
xmlDoc = createobject("Microsoft.XMLDOM")


Flasher wrote:
Или консоль скрытая будет?
Если да, то можно и CSсript, там только букву в имени и тексте манифеста поправить.


Самой консоли там нет (cmd.exe), но при отправке данных на Stdout (на консоль) из скрипта, данные идут в плагин (в буфер) через пайп (CreatePipe). Так и сейчас это в плагине работает.
cmd.exe консоль работает по тому же принципу.

Примерно такой код в плагине. Я брал прямо с этого примера:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499%28v=vs.85%29.aspx

Просто Cscript может писать в StdOut (в пайп), а Wscript не может.

#37:  Author: FlasherLocation: Москва PostPosted: Sat May 21, 2016 08:43
    —
Gentoo69 wrote:
Самой консоли там нет (cmd.exe)
Ну, для консоли командный процессор в случае отдельных утилит и не нужен.
Gentoo69 wrote:
но при отправке данных на Stdout (на консоль) из скрипта, данные идут в плагин (в буфер) через пайп (CreatePipe).
Я понимаю. Как в vbsedit и т.п. Сам процесс-то для консольных интерпретаторов создаётся в скрытом виде (CREATE_NO_WINDOW в сумме dwCreationFlags), судя по всему.

В общем, тогда запуск пойдёт с ключами: CSsript.exe <file> //Nologo //U и пусть считывает строку StdIn, а не StdOut c WScript.Echo.
И как уже просил - для отдельных секций. ОК?
И просьба проверять перед попыткой вывода или хотя бы при запуске ТС ключ HKLM\Software\Microsoft\Windows Script Host\Settings\Enabled, чтобы кучу системных окон не увидеть.
Остальные из HKCR для vbsript, jscript, vbe, jse, wsf, wsh, wsc уже по усмотрению (можно отдать на суд пользователя).

#38:  Author: Dimsok PostPosted: Fri May 27, 2016 12:03
    —
Gentoo69
Перл и руби не планируете добавить?

#39:  Author: Dimsok PostPosted: Sat May 28, 2016 19:56
    —
Gentoo69
А можно с помощью этой штуки выводить заданные строки из архивированных для goldendict в .dz словарей (dsl, xdxf)?

#40:  Author: FlasherLocation: Москва PostPosted: Sat May 28, 2016 20:31
    —
Dimsok
Это задача не "штуки", а скриптового парсинга. И словарь, как правило, - это далеко не 10-20 слов, перевод которых к простому выводу строк можно отнести разве что с большой натяжкой.

#41:  Author: Dimsok PostPosted: Sat May 28, 2016 21:05
    —
В смысле перевод? В dsl надо вывести первые три строки, вроде:
#NAME "Кто есть кто в античном мире"
#INDEX_LANGUAGE "Russian"
#CONTENTS_LANGUAGE "Russian"

В xdxf из 3й и 4й извлекать название и язык.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE xdxf SYSTEM "http://xdxf.sourceforge.net/xdxf_lousy.dtd">
<xdxf lang_from="RUS" lang_to="RUS" format="visual">
<full_name>Энциклопедический словарь Брокгауза и Ефрона</full_name>

wdx вроде "textline" с архивами не работают.

#42:  Author: FlasherLocation: Москва PostPosted: Sat May 28, 2016 21:36
    —
Dimsok wrote:
В смысле перевод?
Указываешь слово, а к нему перевод из dsl.
Dimsok wrote:
wdx вроде "textline" с архивами не работают.
dsl и xdxf - это же текст. dz - это zip или что? Не вижу ни тут ни там.

#43:  Author: Dimsok PostPosted: Sat May 28, 2016 22:36
    —
Quote:
dsl и xdxf - это же текст. dz - то zip или что?

Тот же gzip, для паковки в который даже есть спец. программка dictzip. Раза в 2-3 меньше в ней словари весят, xdxf ещё лучше ужимается, а goldendict читает эти dz как словари.

#44:  Author: FlasherLocation: Москва PostPosted: Sat May 28, 2016 23:39
    —
Я вижу dz только с dict. Есть ссылка, где с dsl и xdxf?

#45:  Author: Dimsok PostPosted: Sun May 29, 2016 00:12
    —
Quote:
Есть ссылка, где с dsl и xdxf?

В ЛС.

#46:  Author: FlasherLocation: Москва PostPosted: Sun May 29, 2016 00:24
    —
Dimsok wrote:
В ЛС.
ОК. C dsl уже нашёл. Завтра посмотрю тогда, получится через поток или нет.

#47:  Author: FlasherLocation: Москва PostPosted: Mon May 30, 2016 12:59
    —
К сожалению, этот плагин не даёт возможность вернуть пути к интерпретатору и скрипту
Code:
Content = WScript.FullName
Content1 = WScript.ScriptFullName
, а без них по-простому консоль не скроешь...

#48:  Author: FlasherLocation: Москва PostPosted: Wed Jun 08, 2016 19:00
    —
Gentoo69
Так что, долго ждать починок?

#49:  Author: Gentoo69 PostPosted: Fri Jun 10, 2016 03:12
    —
Обновление
v1.6 10 June, 2016
***
Добавлена поддержка PowerShell
____________________________________________

PowerShell.exe необходимо некоторое время для старта перед первым использованием ~3 - 6 секунд. Так что первые 3-6 сек, колонки будут пустыми.
PowerShell.exe запускается только раз, и остается запущенным пока не закроется WinScriptAdv плагин.

Можно ускорить запуск PS (вообще, не только в плагине), запустив один раз скрипт в консоли PowerShell (см. ниже) .

До : powershell.exe запускается около 5 сек.
После: powershell.exe запускается около 1,5 сек.

Code:
$env:path = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
[AppDomain]::CurrentDomain.GetAssemblies() | % {
  if (! $_.location) {continue}
  $Name = Split-Path $_.location -leaf
  Write-Host -ForegroundColor Yellow "NGENing : $Name"
  ngen install $_.location | % {"`t$_"}
}
Source

#50:  Author: FlasherLocation: Москва PostPosted: Fri Jun 10, 2016 03:25
    —
Gentoo69
А на мой вопрос ответить?

#51:  Author: Gentoo69 PostPosted: Fri Jun 10, 2016 03:42
    —
Flasher
На днях будет готово.

Только я не понял вот это:
Quote:
К сожалению, этот плагин не даёт возможность вернуть пути к интерпретатору[...]
, а без них по-простому консоль не скроешь...

Плагин ведь запускает парсер(интерпретатор) всегда со скрытым окном, т.е. консоль не видно будет...
Или о чем тут речь?

#52:  Author: FlasherLocation: Москва PostPosted: Fri Jun 10, 2016 04:15
    —
Gentoo69
Может, и ошибаюсь, но не будет видно только консоли с заданным в конфиге CScript, а не той, что вызывается по WSH.Exec.
Что касается поста, то там больше касалось текущей возможности для реализации возврата запрошенных полей.

#53:  Author: Gentoo69 PostPosted: Tue Jun 28, 2016 01:28
    —
Обновление

Не могу обновить шапку. Пишет "Sorry, but only moderators can edit old posts."

Скачать


v.1.7 27 June, 2016
***
Унификация скриптов.
Только для скриптов которые работают через exe интерпретаторы - AHK, PHP, Autoit:
Сейчас вам не нужно добавлять в конце подобных скриптов код для вывода на StdOut консоль значений переменных "content". Плагин сгенерирует и добавит эти строки. Поэтому удалите эти строки с конца кода скрипта, если они есть. (плагин также будет работать корректно если эти строки остались). См. примеры в папке Scripts.

***
Added 2 new params for ExeScriptParsers section:
StdOutFormat and CmdArgs
E.g.: au3=c:\Program Files (x86)\AutoIt3\AutoIt3.exe
au3CmdArgs=ExeArgs
au3StdOutFormat=ConsoleWrite ($%s & @CRLF)
Read info in options.ini


Now you can use VBS in portable versions of Total Commander:

options.ini:

Code:
Code:
; This VBS interpreter is only for example, WinScriptadv uses vbs\js\python engines via COM that is much faster than this.
; You can use it in portable versions of Total commander or if WSH is broken in Windows.
;vbs=%WINDIR%\system32\cscript.exe
;vbsCmdArgs=//nologo
;vbsVarFormat=filename="%s"
;vbsDoubleSlashPath=0
;vbsStdOutFormat=Wscript.echo %s

#54:  Author: FlasherLocation: Москва PostPosted: Tue Jun 28, 2016 05:27
    —
Gentoo69
На днях не получилось. Ну, хоть так. Smile
В общем... С VBS все грабли, о которых шла речь, на виду.

1. Схема с указанием Cscript хоть и работает, но очень медленно в сравнении с простым вызовом с кнопки, даже если весь скрипт - это "Content = 1".
2. В ряде ситуаций вместо результата стала появляться отладка "Время ожидания операции истекло".
3. Wscript.echo надо менять на предлагаемую Wscript.StdOut.WriteLine, иначе имеем зябры вместо кириллицы. Юникод же и в этом случае не читается. Надо бы допилить.
4. Как и писал, после правки скрипта ничего в активной панели не обновляется ни при отключении/включении колонок, ни при обновлении панели, ни при переходе в другой каталог с возвратом.
5. Из-за неудовлетворения просьбы с подключением задаваемого парсера в отдельных скриптовых секциях имеем проблему скорости отображения полей данных от старых скриптов, с которыми ранее данные появлялись в разы шустрее и без глюков с Юникодом и кириллицей.

Из плюсов:
1. В отношении же скрытия WSH.Exec "console" всё как надо.
2. Ключ для WSH временно переключается. Не знаю, всем ли это понравится, но меня устраивает. Поэтому, видимо, из описания можно исключить "or if WSH is broken in Windows". Хотя есть ещё политики. Rolling Eyes

#55:  Author: Gentoo69 PostPosted: Tue Jun 28, 2016 12:00
    —
Flasher

1. Я не понял что такое
Quote:
в сравнении с простым вызовом с кнопки,
. Можете подробнее объяснить?

А так быстрее не сделаешь, через exe парсер всегда медленно. Максимально быстро работает через COM (т.е если закомментировать\убрать эти строки с vbs в options.ini ExeScriptParsers).

2. Время ожидания операции истекло - когда парсер не закрывается в течении определенного времени, - 2 с половиной секунды.

3. Насчет юникода - я не знаю можно ли писать в консоль юникод. Всмысле писать то можно, но оттуда выходит не юникод. Smile

4. В чем проблема закрыть\открыть TC. Это ж секунда, тем более все настройки ТС сохраняет. А делать отдельный функционал для этого думаю не стоит - т.к. обычно скрипты пишутся и отлаживаются отдельно от плагина, а тратить ресурсы на мониторинг скрипт файлов (придется сравнивать дату по таймеру) имхо не надо.
Хотя если сильно понадобится можно и сделать. Smile

5. Ну а как тут по другому? Есть парсер который обрабатывает VBS скрипты через Com - он работает быстро, вы указываете--переопределяете другой парсер для VBS скриптов, указав его exe, соответственно все VBS скрипты будут выполняться через указанный другой парсер. Нет смысла разделять часть vbs скриптов через COM, а часть vbs через спец. парсер.

#56:  Author: FlasherLocation: Москва PostPosted: Tue Jun 28, 2016 14:13
    —
Gentoo69
1. Вызов скрипта командой <путь к CScript.exe> "<путь к скрипту>" с какой-нибудь мессагой.
2. Так почему ему требуется так много времени?
3. Пример на vbs:
Code:
CreateObject("Scripting.FileSystemObject")._
GetStandardStream(1, True).Write "Символы Unicode: àéÿüĄŀĦĤŕž"
WScript.Echo WScript.StdIn.ReadLine
Вызовем из Run: cmd /k cscript.exe //nologo C:\Тест\UnicodeStdOut.vbs
и увидим в консоли правильные символы.
4. Как можно отладить отдельно, если нужно узнать именно поведение плагина, отличающееся от поведения стандартного вызова (правильность отображения, скорость вывода)? И это никак не секунда, а где-то от 5-6 до 15 с учётом всех операций автозавершения и автозапуска, как у меня. Поэтому стоило бы сделать хотя бы опционально.
5. Как это не смысла, если я о нём написал выше? Разделение даст возможность работать быстро там, где не требуется дополнительных данных, и наоборот.
Т.е. по сути ничего в ini не меняется за исключением доп. ключа активации стороннего интерпретатора в секциях скриптов, в то время как без указания ключа останется системный.
6. А ещё у меня выползало окно "Crash External exception EEDFADE".
7. И почему не работает Option Explicit?

#57:  Author: FlasherLocation: Москва PostPosted: Wed Jun 29, 2016 18:10
    —
Flasher wrote:
Завтра посмотрю тогда, получится через поток или нет.
Да, совсем забыл. Т.к. внешник добавили, опубликую вариант от 30.05:
 Dicts.vbs
Предложенные ключи в options.ini для vbs раскомментировать, Wscript.echo заменить на Wscript.StdOut.WriteLine, в ActiveScripts добавить |Dicts с конца. И снизу секцию
Code:
[Dicts]
Script=Dicts.vbs
content=Название
content1=Язык 1
content2=Язык 2
extensions=dsl|dz|xdxf
Перезапустить ТС.

Last edited by Flasher on Thu Jun 30, 2016 04:54; edited 2 times in total

#58:  Author: Dimsok PostPosted: Wed Jun 29, 2016 22:19
    —
Flasher
Спасибо. А консольное окно чтоб где-нибудь за кулисами отображалось можно сделать?


Last edited by Dimsok on Wed Jun 29, 2016 22:22; edited 1 time in total

#59:  Author: FlasherLocation: Москва PostPosted: Wed Jun 29, 2016 22:22
    —
Dimsok >
Flasher wrote:
Предложенные ключи в options.ini для vbs раскомментировать

#60:  Author: Dimsok PostPosted: Wed Jun 29, 2016 22:29
    —
vbsStdOutFormat=Wscript.StdOut.WriteLine %s раскомментировал. А что ещё нужно?

#61:  Author: FlasherLocation: Москва PostPosted: Wed Jun 29, 2016 22:40
    —
Dimsok
Всю группу vbs-ключей секции CheckEncoding.

#62:  Author: Dimsok PostPosted: Wed Jun 29, 2016 23:21
    —
А можно какой-нибудь универсальный вариант, чтобы путём простой правки скрипта (расширение файла, номер строки) можно было легко адаптировать его под другие нужды?

#63:  Author: FlasherLocation: Москва PostPosted: Wed Jun 29, 2016 23:57
    —
Универсальный в каком ключе? Под какие - другие нужды?

#64:  Author: Dimsok PostPosted: Thu Jun 30, 2016 00:02
    —
Для извлечения определённых строк из определённых файлов, хранящихся в архивах

Добавлено спустя 1 час 11 минут:

Да, то, что в процессах остаются висеть 7z.exe и more.com, это нормально?

#65:  Author: FlasherLocation: Москва PostPosted: Thu Jun 30, 2016 05:05
    —
Dimsok wrote:
Для извлечения определённых строк из определённых файлов, хранящихся в архивах
В данном случае всё упрошено до одного текстового файла в архиве с чтением в поток без фактического извлечения. И тут всё утыкается в разномастность шаблонов строк и регулярных выражений на их основе. Можно, конечно, создать сверху массив со списком имён, выражений и числа подвыражений, но в любом случае там, где необходима будет только часть данных, для однотипных файлов вычисляться будут все, да и текущая оптимизация пострадает. Кстати, скрипт касается не только архивов, но и распакованных словарей.
Dimsok wrote:
это нормально?
Нет, конечно. Исправил. Всю голову изломал над этим more, в случае xdxf.dz пришлось радикально гасить, хоть самому это не нравится...

#66:  Author: Dimsok PostPosted: Thu Jun 30, 2016 12:12
    —
Когда 1-2 файла, процессы завершаются. А когда много, при промотке некоторые остаются висеть.

#67:  Author: FlasherLocation: Москва PostPosted: Thu Jun 30, 2016 17:14
    —
Я пробовал с 10+ и проблемы не наблюдал. Скорее это связано с наложенным автором ограничением по времени на отработку скрипта.

#68:  Author: Gentoo69 PostPosted: Thu Sep 01, 2016 18:45
    —
Добавил исходный код плагина.

#69:  Author: FlasherLocation: Москва PostPosted: Thu Sep 01, 2016 19:02
    —
Gentoo69
Лень самому допиливать? Sad

#70:  Author: Gentoo69 PostPosted: Fri Sep 02, 2016 14:32
    —
Flasher
Да нет, почему лень.
Просто я считаю проект вполне завершенным.
А исходный код кому то пригодится как пример для встраивания скриптов в свои программы или для дальнейшего развития плагина, в будущем.
Иногда бывает хочется улучшить какую-то мелочь в каком то чужом плагине, которому лет 10, а сырцов нету и до автора не дозвонишься.. Лучше пусть будет, чем наоборот.

#71:  Author: FlasherLocation: Москва PostPosted: Fri Sep 02, 2016 17:16
    —
Gentoo69 wrote:
Просто я считаю проект вполне завершенным.
При таких проблемах его никак нельзя считать завершённым.

#72:  Author: Dimsok PostPosted: Fri Sep 02, 2016 19:05
    —
В общем, чтобы не повторяться:
И раз такие вещи http://forum.wincmd.ru/viewpost.php?p=117162 без лагов и тормозов решаются, буду рад такому воплощению.

#73:  Author: FlasherLocation: Москва PostPosted: Sat Sep 03, 2016 00:06
    —
Поспешил я с выводами. Всё равно придётся файл в Temp закидывать.
Проверь после ассоциации dz в свойствах отдельно скрипт. Что покажет?
Code:
DZ = "C:\Test.dsl.dz"
MsgBox CreateObject("Shell.Application").NameSpace(DZ).Items.Item(0)

#74:  Author: Dimsok PostPosted: Sat Sep 03, 2016 10:20
    —
Quote:
Проверь после ассоциации dz в свойствах отдельно скрипт.

Ассоциации в TC4Shell, а потом этот скрипт из двух строк добавить в WinscriptAdv наподобии Dicts.vbs?

#75:  Author: FlasherLocation: Москва PostPosted: Sat Sep 03, 2016 11:58
    —
>>>
Flasher wrote:
отдельно

#76:  Author: Dimsok PostPosted: Sat Sep 03, 2016 12:45
    —
Line:2
Char:2
Error: Object required: 'CreatedObject(...).NameSpace(...)
Code: 800A01A8

Не заморачивайся, не выходит и ладно.

#77:  Author: FlasherLocation: Москва PostPosted: Sat Sep 03, 2016 12:53
    —
Dimsok
Very Happy А путь-то верный прописал?

#78:  Author: Dimsok PostPosted: Sat Sep 03, 2016 13:08
    —
Просто c:
Да и вообще как-то странно они открываются через TC4Shell. Словари в корне архива, а открывается сначала папка с: хоть dz может совем в др месте находиться.

#79:  Author: FlasherLocation: Москва PostPosted: Sat Sep 03, 2016 13:33
    —
Вот и я про то же.

#80:  Author: Dimsok PostPosted: Sat Sep 03, 2016 19:02
    —
Dictzip по умолчанию почему-то так архивирует. Вот сделал кнопку, чтобы файл сразу в корне был:
Code:
TOTALCMD#BAR#DATA
%ComSpec% /c for /f "delims=" %# in
('type %WF') do "%%COMMANDER_PATH%%\Plugins\exe\DictZipUI\dictzip.exe" -k "%%#" && move "%p%%~n#.dsl.dz" "%t"
%COMMANDER_PATH%\Totalcmd.exe,21
Compress dsl dicts with dictzip to other panel

1
-1


Запаковал таким образом dsl и xdxf для тестов:
https://yadi.sk/d/SmFt53QUujVp3

Если что-то получится, перепаковать таким образом все имеющиеся словари не сложно. Главное, чтоб Goldendict их заново индексировать не вздумал, вот это долго будет.

#81:  Author: FlasherLocation: Москва PostPosted: Sat Sep 03, 2016 20:24
    —
Dimsok wrote:
Если что-то получится
Да не в "получится" дело, а в копировании больших словарей в Temp, если такие имеются. Это всё весьма долго, и прогресс на Vista+ не убирается.. Для мелких словарей (до 4 Мб) можешь попробовать:
 Dicts.vbs
Понятно, что vbs-ini-ключи нужно перед этим обратно закомментировать.

#82:  Author: Dimsok PostPosted: Sun Sep 04, 2016 12:37
    —
Некоторые отображают норм, некоторые С:\Docume~. Впрочем, это неважно - даже не на самых больших словарях повисает надолго, так что первый вариант скрипта без Tc4Shell более пригодный. Если бы ещё все процессы 7z.exe и more.com завершались бы, было вообще хорошо. Very Happy

#83:  Author: Dimsok PostPosted: Sun Sep 04, 2016 16:40
    —
А саму Dictzip нельзя использовать? При декомпрессии там есть возможность stdout.

#84:  Author: FlasherLocation: Москва PostPosted: Sun Sep 04, 2016 18:57
    —
Я тогда ещё пробовал, утилита пакует файл, никак не риагируя на ключ -с.

#85:  Author: Dimsok PostPosted: Sun Sep 04, 2016 19:35
    —
При распаковке реагирует. Там указано, что этот ключ только при распаковке действует. А зачем для извлечения строк нужно паковать?

#86:  Author: FlasherLocation: Москва PostPosted: Sun Sep 04, 2016 19:52
    —
Да не суть важно, он не умеет читать текст, он просто архив как бинарник выводит.

#87:  Author: Dimsok PostPosted: Sun Sep 04, 2016 20:05
    —
-d "*.dz" -c
Отображает вполне себе текстовое содержимое в консоль.

#88:  Author: FlasherLocation: Москва PostPosted: Sun Sep 04, 2016 20:13
    —
Выводит строки такого плана: ╤Д╨╛╤А╤Б-╨╝╨░╨╢╨╛╤А.

#89:  Author: Dimsok PostPosted: Sun Sep 04, 2016 20:16
    —
Не знаю, у меня норм отображается. В консоли правда русские не видны, но перенаправление в файл выдаёт корректный текст.

#90:  Author: FlasherLocation: Москва PostPosted: Sun Sep 04, 2016 20:32
    —
SHA у dictzip.exe такой?: ad160360c5c762f4906ffcda5d43a010be408b09
Вот кнопка:
Code:
TOTALCMD#BAR#DATA
cmd /k "%COMMANDER_PATH%\Utils\dictzip.exe" -d
%N -c
%COMMANDER_EXE%,2
Вывод с пом. dictzip

#91:  Author: Dimsok PostPosted: Sun Sep 04, 2016 21:01
    —
Да, такой же.
Я так понял, файлы в ansi должны быть, а те, что в уникоде при переводе в ansi тоже почему то в некоторых местах вместо текста каракули, хотя с некоторыми нормально показывает. В общем, тоже не рабочий вариант.

#92:  Author: FlasherLocation: Москва PostPosted: Mon Sep 05, 2016 01:40
    —
Я уже по всякому пробовал с разными перекодировками, и через /u, и с more, и т.п., не выходит вывести текст.

#93:  Author: Mailk PostPosted: Mon Sep 05, 2016 04:30
    —
Потребность в том чтобы плагин можно было использовать в инструменте изменение атрибутов. Мне не только данные выводить нужно и хочется их изменить. Возможно изменить плагин автору?
Это позволяет использовать его совместно с другими плагинами и дополнять возможности каждого плагина!

#94:  Author: fundukLocation: Санкт-Петербург PostPosted: Sun Sep 11, 2016 00:31
    —
Flasher wrote:
4. Как и писал, после правки скрипта ничего в активной панели не обновляется ни при отключении/включении колонок, ни при обновлении панели, ни при переходе в другой каталог с возвратом.
Я это решаю вызовом команд cm_UnloadPlugins и обновления панели.

#95:  Author: newsky PostPosted: Tue Sep 27, 2016 11:56
    —
Подскажите пожалуйста, как запустить вот этот скрипт с данным плагином?

По ReadMe сделал следущее:

1. Добавил секцию:
Code:
[General]
Script=General.vbs
content=Result
extensions=*
FoldersPaths=0

2. Добавил в секцию [Script]:
Code:
ActiveScripts=MinutesAgo|CheckEncoding|Signature|General

3. Перезапустил ТС
4. Да, скрипт General.vbs положил в папку Scripts

Запускаю alt+F7, выбираю плагин, Result=1, поиск начинается и файл(ы) не находятся, хотя они точно есть и этот скрипт с плагином
Script Content Plugin прекрасно всё находит. Явно, что-то, где-то я не доделал, помогите пожалуйста, что именно? Спасибо.

#96:  Author: FlasherLocation: Москва PostPosted: Tue Sep 27, 2016 12:33
    —
newsky
Смотря как составлен список, и правильно ли он указан в 5-й строке.
Если сам список составлен из имён, то вполне можно искать и без плагина (см. Место поиска > Новое), переложив список в папку для поиска.

#97:  Author: newsky PostPosted: Tue Sep 27, 2016 12:43
    —
Flasher
Список составлен из имён, с расширениями, без пути:
1.jpg
2.jpg
...

В том и задача, что я не знаю где, но знаю что, нужно искать.

Список думаю указан правильно:
Code:
Const FileList = "d:\My documents\Desktop\FileTree.txt" 'Файл-список

Потому, как Script Content Plugin отрабатывает отлично.
О новой возможности поиска из списка знаю, спасибо, но тут именно:
Quote:
содержащего список файлов и каталогов, в которых нужно выполнить поиск.
а я повторюсь, есть только имена файлов и нужно их искать во всех подпапках.

Явно, что-то не так я настроил, но вот, что Sad

#98:  Author: FlasherLocation: Москва PostPosted: Tue Sep 27, 2016 12:48
    —
newsky wrote:
но тут именно:
Мало ли, что там именно. Это уже неточности перевода. Если я предлагаю, то, наверно, не просто так?

А что касается плагина, то я бы ещё поменял Result на что-то другое. Вдруг есть совпадения.

#99:  Author: newsky PostPosted: Tue Sep 27, 2016 12:58
    —
Flasher
Ок, при таком поисковом запросе Alt+F7
Code:
@d:\FileTree.txt

с содержанием FileTree.txt:
Code:
116813.jpg
13853.jpg
58deb6f0f3c33fb93ccba1e27e432f80.jpg
59022.jpg
89660.jpg
89666.jpg
89669.jpg
9313.jpg
d10918453222l (1).jpg
d22238563712b (2).jpg
d2763627502l (1).jpg
d29714550942b (2).jpg
g23007454092 (1).jpg
g5010100319 (1).jpg
___________3_1_4ecbd7ff172ff.jpg
_________________4f1be7fccc9fc.jpg

лежащем в корне диска D, ничего не находится и поиск заканчивается мгновенно, в подпапках явно даже не собирается искать, что я делаю не так? Smile

Я бы только "За" искать без скриптов и плагинов файлы (только имена) из списка, но что-то никак Smile Научите, если не трудно

#100:  Author: FlasherLocation: Москва PostPosted: Tue Sep 27, 2016 13:38
    —
Я не подумал про глубину, т.к. плагин у меня ассоциируется больше с колонками, а не поиском. Т.е. ТС искать файлы будет только на текущем уровне.

Возвращаемся к плагину. Весь скрипт:
Code:
FileList = "d:\My documents\Desktop\FileTree.txt" 'Файл-список
Dim L, content : L = vbNewLine : content = 0
With CreateObject("Scripting.FileSystemObject")
  If .FileExists(FileList) Then If InStr(L & .OpenTextFile(FileList)._
  ReadAll & L, L & .GetFileName(Filename) & L) Then content = 1
End With
После замены не забыть перезапустить ТС.

#101:  Author: newsky PostPosted: Tue Sep 27, 2016 13:59
    —
Flasher! Большое спасибо! Заработало!
А указанный выше скрипт, не хотел работать с данным плагином из-за каких-то конфликтов? Просто есть производный скрипт от того скрипта, который ищет не по целому имени файла с расширением указанным в списке, но можно задать поиск по начальным символам из списка, я честно говоря, хотел и этот скрипт приспособить к WinScript Advanced Content Plugin, думал, разобравшись с первым, пойму как подключить и этот, а Вы помогли мне, но с новым скриптом, не сочтите за наглость, поясните пожалуйста, можно подключить и этот скрипт или может есть решение попроще, как в предыдущем случае, всего несколько строк? Smile

#102:  Author: FlasherLocation: Москва PostPosted: Tue Sep 27, 2016 14:12
    —
newsky
Пож-та. Конфликт был в том, что этот плагин возвращает только полные пути файлов. У него нет ключа аля LongName.
Честно говоря, не понял смысла 2-го скрипта. Один символ - это тоже соответствие, но что от него толку? Может, нужен, какой-то более явный критерий?
Скрипт подсократим, но сперва нужно точно обрисовать цель.

#103:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Oct 10, 2016 15:54
    —
newsky
Поменяй везде filename на FSO.GetFileName(filename).

Flasher
Flasher wrote:
Честно говоря, не понял смысла 2-го скрипта. Один символ - это тоже соответствие, но что от него толку?

Делал, как просили - для списка с началами имён файлов.

#104:  Author: FlasherLocation: Москва PostPosted: Mon Oct 10, 2016 21:01
    —
Batya
Да какая теперь разница, newsky не захотел продолжать.

#105:  Author: Dimsok PostPosted: Wed Oct 12, 2016 12:41
    —
Итак, запрос скрипта для отображения колонок наличия/отстутствия альфа-канала.

#106:  Author: FlasherLocation: Москва PostPosted: Wed Oct 12, 2016 14:33
    —
Dimsok wrote:
запрос скрипта для отображения колонок наличия/отстутствия альфа-канала.
GraphicProps.vbs:
Code:
Set Reg = New Regexp : Reg.IgnoreCase = True
Reg.Pattern = "^([abcgkmorxy]|bmp[23]?|bie|clipboard|cur|dib|emf|gif(|87)|group4|icon?|jbi?g|jp[egx]|jpeg-ls|histogram|msl|mvg|null|p?jpeg|png(|8|24|32)|preview|rle|text|vid|xwd|p?tiff?)$"
If Reg.Test(Mid(FileName, InStrRev(FileName, ".") + 1)) Then
  With CreateObject("WIA.ImageFile")
    On Error Resume Next
    .LoadFile FileName : Content = .FileExtension
    If Err.Number = 0 Then
      Content1 = "Нет" : Content3 = "Нет"
      If .IsAlphaPixelFormat Then Content1 = "Есть"
      If .IsAnimated         Then Content3 = "Есть"
    End If
  End With
End If : Content2 = "Нет"
' Следующую строку в случае отображения всех кроме "Прозрачность" полей можно закомментировать (разница по скорости сразу станет ощутима):
If CreateObject("WScript.Shell").Run("%ComSpec% /c for /f %# in ('""""%COMMANDER_PATH%\Utils\ImageMagick\identify.exe"" -format %[opaque] """ & FileName & """|find /i /c ""true""""') do exit /b %#", 0, True) = 0 Then Content2 = "Есть"
< См. путь к identify. +
 options.ini


Last edited by Flasher on Fri Oct 14, 2016 10:57; edited 6 times in total

#107:  Author: Dimsok PostPosted: Wed Oct 12, 2016 23:24
    —
Спасибо.
А как к примеру добавить svg формат? Просто добавление его в список расширений не срабатывает.
И "Анимация" не отрабатывает. На анимированных отображает отсутствие анимации.

#108:  Author: FlasherLocation: Москва PostPosted: Wed Oct 12, 2016 23:28
    —
Увы, никак. Список - это не любая графика, а та, что поддерживается.
Анимация на gif-ах должна точно работать. Дай пример.

На хрюше все колонки отработали? Smile

#109:  Author: Dimsok PostPosted: Wed Oct 12, 2016 23:53
    —
Quote:
Увы, никак. Список - это не любая графика, а та, что поддерживается.

Что-то не понял. Если отдельно в консоли на svg, то всё так же отрабатывает, как и с другими форматами.

Quote:
На хрюше все колонки отработали?

Вроде да.

Quote:
Дай пример.

https://yadi.sk/d/rvrVRuO2wjBdA
Из этого набора показывают только 7. Заметил закономерность, что наличие анимации отображается только в тех, где в колонках "альфа-канал" и "прозрачность" негативный результат.

#110:  Author: FlasherLocation: Москва PostPosted: Thu Oct 13, 2016 00:21
    —
Dimsok wrote:
Если отдельно в консоли на svg, то всё так же отрабатывает, как и с другими форматами.
С identify? А "Прозрачность" в колонке неверно инфу показывает? Другие форматы - это какие?
Dimsok wrote:
Вроде да.
Гуд!
С анимацией мой косяк. Исправил.

#111:  Author: Dimsok PostPosted: Thu Oct 13, 2016 00:30
    —
Quote:
А "Прозрачность" в колонке не показывает? Другие форматы - это какие?

Мне подумалось, что ты сказал, будто для svg не действует тот же самый -format %A. Просто подумалось странным, что добавление этого расширения в svg не приводит к результату, в скрипте они тоже нигде не прописаны. Под другими форматами имел в виду те, которые ты прописал в extensions=

#112:  Author: FlasherLocation: Москва PostPosted: Thu Oct 13, 2016 01:30
    —
ОК. Понятно, почему не отрабатывает.
Посмотрел весь список по identify -list format, но проверке прозрачности большинство не подвержены. Нужно отобрать подходящие.

#113:  Author: Dimsok PostPosted: Thu Oct 13, 2016 10:00
    —
Quote:
Посмотрел весь список по identify -list format, но проверке прозрачности большинство не подвержены. Нужно отобрать подходящие.

Странно, что, например, jpg подвержены или bmp.

#114:  Author: FlasherLocation: Москва PostPosted: Thu Oct 13, 2016 10:12
    —
Так они центровые. Неудивительно. К тому же в bmp может быть альфа.

#115:  Author: Dimsok PostPosted: Thu Oct 13, 2016 13:58
    —
Flasher
Wdx всегда заполняет колонки только тех файлов, которые в видимой части экрана, или это особенность действия данного плагина?

#116:  Author: FlasherLocation: Москва PostPosted: Thu Oct 13, 2016 19:37
    —
Dimsok
Нет. Это фишка ТС, если сортируешь по имени/типу.

В общем, мне лень было искать всё подряд, конвертнул по спискам (т.е. берём только то, что выдало прозрачность). См. выше, что получилось.

P.S.: Автор улизнул, а поддержку регулярок для extensions кому-то другому делать...

#117:  Author: Mailk PostPosted: Tue Oct 25, 2016 02:48
    —
кто ни будь объясните автору плагина что нужно чтоб было в изменение атрибутов .. менять нужно содержимое а не только смотреть!

#118:  Author: FlasherLocation: Москва PostPosted: Tue Dec 20, 2016 18:44
    —
Gentoo69 wrote:
Quote:
1. Просьба ввести ключ 2 (только папки) для FoldersPaths.

Ok.
Автор так и не выполнил обещание...

#119:  Author: BeardFury78 PostPosted: Sat Jan 28, 2017 20:03
    —
Когда в ИГП захожу в раздел "плагины" и перехожу к поле winscriptsadv, то происходит прекращение работы Тотала. Это у всех так или у меня одного?
Версия плагина 1.7, TC 9.0a 64 bit.

#120:  Author: FlasherLocation: Москва PostPosted: Sat Jan 28, 2017 20:07
    —
BeardFury78
Могу только сказать, что я сталкивался с отладочным окном, если были какие-то ошибки в ini или скриптах.

#121:  Author: BeardFury78 PostPosted: Sat Jan 28, 2017 20:13
    —
Flasher
Я переустанавливал этот плагин, пробовал запускать только чистый плагин без других скриптов, пробовал ставить только 64 bit, но почему-то все время при переходе в ИГП к этому плагину происходит вылет. Сами колонки, использующие скрипты от этого плагина, работают нормально. У вас не происходит вылет, когда совершаете эти действия "ИГП - поле "=?[Плагин]" - поле "winscriptsadv"?

#122:  Author: FlasherLocation: Москва PostPosted: Sat Jan 28, 2017 20:32
    —
BeardFury78
Нет, я же прекрасно понял, о чём речь. Но у меня не x64. Предлагаю сравнить с x32.

#123:  Author: BeardFury78 PostPosted: Sat Jan 28, 2017 20:40
    —
Flasher
Ладно, проблему решил окольным путем. Просто скопировал поле скрипта из набора колонок и вставил в ИГП.

#124:  Author: Aquila PostPosted: Sun Jan 29, 2017 00:30
    —
BeardFury78
Аналогично, не работает ни в MRT, ни в Custom Columns, приходится вручную вводить. TC - 9.0a x32/x64. C 8.52 проблемы не было.

#125:  Author: FlasherLocation: Москва PostPosted: Sun Jan 29, 2017 01:20
    —
BeardFury78
А если встать на полях этого скрипта, покажет ошибку?

#126:  Author: BeardFury78 PostPosted: Sun Jan 29, 2017 01:51
    —
Flasher
Да, на этом скрипте, только не показывает ошибку, а просто крашится. С сообщением "прекращена работа Тотала".

#127:  Author: Aquila PostPosted: Sun Jan 29, 2017 10:22
    —
Flasher
До выбора полей с любым скриптом, даже если Ваш один только, не доходит. x64 молча крашится, x32 с ошибкой


#128:  Author: FlasherLocation: Москва PostPosted: Sun Jan 29, 2017 13:12
    —
Aquila wrote:
x32 с ошибкой
Вот и у меня почти на всех вываливает. Указанный стал перемещать в первом ключе и в порядке следованя секций, тоже стал выкидывать это окно.
Но почему-то для полей этого и этого скрипта никогда не крашит. Shocked
Попытки выявить закономерность не увенчались успехом...

Кстати, про ошибку эту ещё 11 октября на оффоруме писали.

#129:  Author: Aquila PostPosted: Sun Jan 29, 2017 15:54
    —
Flasher
Я в курсе, мне лень писать было ..... Я заметил как только появилась 9-я версия

#130:  Author: FlasherLocation: Москва PostPosted: Sun Jan 29, 2017 16:18
    —
Aquila
А протестировать на указанных скриптах нет желания?

#131:  Author: Aquila PostPosted: Sun Jan 29, 2017 19:06
    —
Flasher
UPD:
С тремя Вашими (MeanCount и два Dicts) работает нормально, дает выбрать поля ...

#132:  Author: FlasherLocation: Москва PostPosted: Sun Jan 29, 2017 19:19
    —
Aquila
Так с MeanCount же выше якобы не работало. Question

#133:  Author: Aquila PostPosted: Sun Jan 29, 2017 19:30
    —
Flasher
Забыл перезагрузить TC ....

UPD2: Поменял порядок следования скриптов в строке ActiveScripts в ini-файле. Теперь дает выбрать поля и крашится сразу после выбора или через несколько секунд после нажатия Enter. Если перемещать курсор по полям в диалоге выбора, через некоторое время (три-пять секунд) тоже крашится ...

#134:  Author: BeardFury78 PostPosted: Thu Feb 02, 2017 06:26
    —
А нету ли скрипта для этого плагина, который умел бы искать по регэкспу определенный текст в текстовых файлах? Нужно для переименования в ИГП текстовых файлов, используя в качестве названия определенный текст в самых файлах.

#135:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Feb 02, 2017 13:56
    —
BeardFury78
Вот мой старый скрипт, где я ещё разбираю XML через рег. выражения:
Code:
Dim FSO, lText
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1
lText = FSO.OpenTextFile(filename, ForReading).ReadAll

content   = GetXmlResult(lText, "Документ", "ИдДок"     )
content1  = GetXmlResult(lText, "Документ", "НомСооб"   )
content2  = GetXmlResult(lText, "Документ", "ДатаСооб"  )
content3  = GetXmlResult(lText, "СвСчет"  , "НомСч"     )
content4  = GetXmlResult(lText, "Файл"    , "ИдФайл"    )
content5  = GetXmlResult(lText, "Документ", "ИдФайлИсх" )
content6  = GetXmlResult(lText, "Документ", "ДатаОбр"   )
content7  = GetXmlResult(lText, "Документ", "КодОбр"    )
content8  = GetXmlResult(lText, "Документ", "РезОбр"    )
content9  = GetXmlResult(lText, "Ошибки"  , "КодОшибки" )
content10 = GetXmlResult(lText, "Ошибки"  , "НаимОшибки")
content11 = GetXmlResult(lText, "Документ", "ТипСооб"   )
content12 = trim(_
            GetXmlResult2(lText, "СвНП"   , "ФИОФЛ", "Фамилия" ) & " " &_
            GetXmlResult2(lText, "СвНП"   , "ФИОФЛ", "Имя"     ) & " " &_
            GetXmlResult2(lText, "СвНП"   , "ФИОФЛ", "Отчество") & " " &_
            GetXmlResult2(lText, "НПИП"   , "ФИОИП", "Фамилия" ) & " " &_
            GetXmlResult2(lText, "НПИП"   , "ФИОИП", "Имя"     ) & " " &_
            GetXmlResult2(lText, "НПИП"   , "ФИОИП", "Отчество") & " " &_
            replace(GetXmlResult2(lText, "СвНП", "НПРО", "НаимОрг"), "&quot;", """") & " " &_
            replace(GetXmlResult2(lText, "СвНП", "НПИО", "НаимОрг"), "&quot;", """"))
Set FSO = Nothing

Function GetXmlResult(pText, pTag1, pTag2)
  GetXmlResult = ""
  On Error Resume Next
  GetXmlResult = GetXMLValue(pText, pTag1, pTag2)
  If Err.Number <> 0 Then GetXmlResult = ""
  On Error GoTo 0
End Function

' Получить значение из XML
Function GetXMLValue(byVal pText, pParentTag, pTag)
  Dim REx
  Set REx = New RegExp
  REx.Global     = True
  REx.IgnoreCase = True
  REx.Pattern = "< *" & pParentTag & "[\r ][^>]*" & pTag & " *= *""([^>=]+) *""[\r >]"
  If REx.Test(pText) Then GetXMLValue = REx.Execute(pText)(0).SubMatches(0)
End Function

Function GetXmlResult2(pText, pTag1, pTag2, pTag3)
  GetXmlResult2 = ""
  On Error Resume Next
  GetXmlResult2 = GetXMLValue2(pText, pTag1, pTag2, pTag3)
  If Err.Number <> 0 Then GetXmlResult2 = ""
  On Error GoTo 0
End Function

' Получить значение из XML 2
Function GetXMLValue2(byVal pText, pParentTag1, pParentTag2, pTag)
  Dim REx
  Set REx = New RegExp
  REx.Global     = True
  REx.IgnoreCase = True
  REx.Pattern = "< *" & pParentTag1 & "[\r ][^>]*>[^<]*<" & pParentTag2 & "[\r ][^>]*" & pTag & " *= *""([^>=]+) *""[^>]*>[^\?]*</" & pParentTag1 & ">"
  If REx.Test(pText) Then GetXMLValue2 = REx.Execute(pText)(0).SubMatches(0)
End Function

#136:  Author: FlasherLocation: Москва PostPosted: Thu Feb 02, 2017 14:36
    —
BeardFury78
Для сеих нужд есть свой плагин с темой обсуждения.

#137:  Author: BeardFury78 PostPosted: Fri Feb 03, 2017 02:29
    —
Спасибо Batya и Flasher за ответы, с помощью плагина PCREsearch 2.5 удалось решить задачу.

#138:  Author: Dimsok PostPosted: Thu Feb 09, 2017 18:04
    —
Flasher
Как насчёт скрипта, для отображения колонок с названием кодировки с помощью enca? Должен побольше распознавать, чем имеющийся для этой цели плагин.

#139:  Author: FlasherLocation: Москва PostPosted: Thu Feb 09, 2017 19:50
    —
Dimsok
Она с юникодными именами не работает.

#140:  Author: Dimsok PostPosted: Thu Feb 09, 2017 20:05
    —
Да, проверил, плохо определяет.

#141:  Author: FlasherLocation: Москва PostPosted: Thu Feb 09, 2017 20:52
    —
В смысле "плохо определяет"? Она вообще с ними не работает.

#142:  Author: Dimsok PostPosted: Fri Feb 10, 2017 10:21
    —
Ну я не конкретно про эту кодировку, а с другими пробовал.

Добавлено спустя 24 минуты:

Chardet определяет. Только вряд ли его можно будет прикруть. У меня ещё питон кириллические имена в файлах/путях не распознаёт. Везде ли так, не знаю.

#143:  Author: FlasherLocation: Москва PostPosted: Fri Feb 10, 2017 22:54
    —
Про какую "эту"? Под юникодными именами понимается всё, что не лезет в ANSI-диапазоны.
А скомпиленный Chardet есть? А то мне лень этим заниматься.

#144:  Author: Dimsok PostPosted: Fri Feb 10, 2017 23:13
    —
Ну UTF8 тоже вроде как уникодом можно назвать, но enca её распознаёт. И китайский Bg5 тоже вроде заявлен.

А скомпилированного Chardet похоже нет. У меня после установки появился exe файл от неё, но он всё равно ссылается на питон. С портативным питоном может и завёлся бы.

Quote:
А то мне лень этим заниматься.

А скрипты писать не лень? Very Happy

#145:  Author: FlasherLocation: Москва PostPosted: Fri Feb 10, 2017 23:18
    —
Что распознаёт enca внутри файла к делу отношения не имеет. Слово "именами" тому свидетель.

Скрипт садишься и сразу пишешь, а тут чего-то куда-то где-то лезешь, скачиваешь, проверяешь/перепроверяешь, пакуешь, 589 файлов, то да сё, тудым-сюдым... Very Happy

#146:  Author: SilverVoxLocation: Русь PostPosted: Tue Feb 21, 2017 18:24
    —
Здравствуйте!

Имеется потребность выводить в колонках число, количество жестких ссылок для файлов и каталогов. Или хотя-бы подсветить файл, имеющий копии посредством жестких соединений.

VBS cкрипт могу попробовать написать самостоятельно. Но ума не приложу какие объекты или методы использовать для решения данной задачи?
Старался прочесть много разной документации, но ничего подобного пока не нашел, продолжаю искать.
Использовал пока только свойство Attributes из FileSystemObject. Что дало возможность определять, является ли файл символической ссылкой и подкрашивать в соответствующий цвет. Но толку от этого мало, так как символьные ссылки и так обозначаются соответствующей иконкой.

Да, наверное у меня для решение этой задачи весьма ограниченно время, поэтому-то и спешу просить пинка в нужном направлении. Хотя вопрос может и глуп, может и сам найду что нужно. Но искать приходится на скорую руку.


Last edited by SilverVox on Tue Feb 21, 2017 18:54; edited 2 times in total

#147:  Author: FlasherLocation: Москва PostPosted: Tue Feb 21, 2017 18:47
    —
SilverVox
К данному плагину прибегают, когда нет нормальных вариантов. А они давно известны:
[=ntlinks.Жестких ссылок]
[=nl_info.Число жёстких ссылок]

#148:  Author: SilverVoxLocation: Русь PostPosted: Tue Feb 21, 2017 19:06
    —
Flasher
Вы имеете ввиду контентные плагины?
Чего, это я так не досмотрел. Лоханулся совсем по детски.

Спасибо!

#149:  Author: ZZZAlexZZZ PostPosted: Fri Sep 01, 2017 17:26
    —
Добрый день.
Что необходимо исправить в сприпте ниже - на незнакомом формате выдает ошибку "несоответствие типа FormatCurrency"?

 Скрипт

#150:  Author: FlasherLocation: Москва PostPosted: Fri Sep 01, 2017 18:09
    —
ZZZAlexZZZ
Сперва бы не помешало задачу целиком описать.

#151:  Author: ZZZAlexZZZ PostPosted: Fri Sep 01, 2017 18:28
    —
Flasher
Цель - лучшее визуальное представление документов посредством разделения имени вида {ИМЯ Номер Договор dd.MM.YYYY Сумма ццццц-цц счет номер} на составляющие.
Документов много, требуется сортировка по работе по полям. Если в папке лежат другие документы - в поле попадает вывод ошибки
P.S Понятно что есть плагин Expander2, но он используется для другого - другой разделитель. Да и академический интерес - в дальнейшем м.б. потребуется поколдовать для представления или поиска через регулярки с именами (на перспективу) - здесь скрипт погибче чем плагин.

#152:  Author: FlasherLocation: Москва PostPosted: Fri Sep 01, 2017 18:34
    —
ZZZAlexZZZ
Цель — это хорошо, но меня интересовала полноценная задача с примерами. Сейчас я вижу 8 составляющих, а в скрипте их 14.

#153:  Author: ZZZAlexZZZ PostPosted: Fri Sep 01, 2017 18:46
    —
Flasher
8 - это сейчас, 14 - на перспективу
например (в реальности их сотни) 3 файла с именами:

17_08_15_План Освоения Ext
ПП 25 04.05.2017 КРК 52!ПП Спецификация 25 4578-23 СЧ 234
ПП 256 28.04.2017 ПРИ 35!МИ Спецификация 545 223200-25 СЧ 4878

Выводится в колонки 1-8 (соответственно слова разделенные по пробелу)

Несоответствие типа: 'FormatCurrency'
ПП 25 4 мая 2017 г. КРК 52!ПП Спецификация 25 4 578,23 ₽
ПП 256 28 апреля 2017 г. ПРИ 35!МИ Спецификация 545 223 200,25 ₽

Скрипт в текущем виде спотыкается на неизвестном ему формате - хотелось бы чтобы или ничего не выдавал, или знакомые ему числа, даты, суммы (сейчас сумма представляется как ЦИФРА(рубл) - ЦИФРА(коп))

#154:  Author: FlasherLocation: Москва PostPosted: Fri Sep 01, 2017 19:14
    —
ZZZAlexZZZ
Увы, но на полноценную задачу это не тянет. Даны условно исходные данные без обозначений искомых составляющих в неясной последовательности. Понять по такой информации, как отличать друг от друга те или иные составляющие, весьма затруднительно.

#155:  Author: ZZZAlexZZZ PostPosted: Fri Sep 01, 2017 19:20
    —
Flasher
Хорошо, сузим задачу.
Как в этом куске кода

Code:

If Matches.Count > 0 Then
      ArrPN(i) = FormatCurrency(objRegExp.Replace(ArrPN(i), "$1") & ","& objRegExp.Replace(ArrPN(i), "$3"), -1, -1)
   End If


исключить данные, которые не принимает функция FormatCurrency?
Паттерн "(\d+)(\D)(\d\d)" не может не быть числом - первое и третье вхождение я так понимаю числа.

#156:  Author: FlasherLocation: Москва PostPosted: Fri Sep 01, 2017 19:49
    —
ZZZAlexZZZ
Лучше не сужать. Я бы этот скрипт упростил. Нужен конкретный вывод, последовательность и вероятность наличия/отсутствия тех или иных символов/составляющих. Без этого и на последний вопрос ответить проблематично.
И вообще по регуляркам есть смысл сюда писать.

#157:  Author: ZZZAlexZZZ PostPosted: Mon Sep 04, 2017 12:21
    —
Flasher
Верно подмечено, дело было в регулярке - д.б. ^(\d+)(\D)(\d\d)$
Теперь дата выглядит как дата, число с разделением групп разрядов, денежный формат как денежный формат.
Ссылка
Спасибо за участие

#158:  Author: yozhikLocation: Электросталь PostPosted: Fri Sep 08, 2017 20:07
    —
Flasher
Попробовал в Вашем скрипте MSOfficeProps.vbs заменить некоторые Properties массиве. Посыпались ошибки. Пытаясь выяснить в чём дело сократил скрипт до двух строчек:
Code:
Set File = CreateObject("Shell.Application").NameSpace(0).ParseName(FileName)
Execute "Content=File.ExtendedProperty(""System.ApplicationName"")"

Именно этот вариант отрабатывает исправно, WinScriptsAdv выводит информацию. Но если поменять System.ApplicationName на System.Author или System.Category, плагин крашится:
Code:
Crash in plugin WinScriptsAdv.wdx:
External exception EEDFADE

WDX Guide тоже выдаёт ошибку:
Code:
WDX Guide
Exception in ContentGetValue

Некоторые свойства принимает и отображает, некоторые – ошибка. В чём может быть причина?
Свойства беру отсюда. Опыты произвожу на Windows 8.1 x86.

#159:  Author: FlasherLocation: Москва PostPosted: Fri Sep 08, 2017 20:25
    —
yozhik
1. Почему shelldetails не пользуетесь?
2. В указанный скрипт писать стоит в конец массива.
Quote:
... in Array(..., "System.Language", "System.блабла", "System.блабла")

3. Если нужна частичная замена, то лучше сразу написать нужный список под спойлером.

#160:  Author: yozhikLocation: Электросталь PostPosted: Fri Sep 08, 2017 20:42
    —
Flasher
1. Буду теперь. Раньше не знал где брать дополнительные Properties, но вчера узнал, пока разбирался со скриптом. А ещё в скрипт можно доп. функцию дописать, по примеру Вашей FTime() в MSOfficeProps.vbs, которая видоизменяет полученное значение – в ShellDetails нет такой возможности.
2. Вписал:
Code:
... in Array(..., "System.Language", "System.Author")

Получил ошибку. А если вместо System.Author вписать System.Company, то нет ошибки. Не могу понять почему из одной и той же группы (Windows Properties Core) одни свойства обрабатываются, другие нет...

#161:  Author: FlasherLocation: Москва PostPosted: Fri Sep 08, 2017 20:56
    —
yozhik
Author - это список авторов (массив), он не может обрабатываться как строка. Company в System. не нуждается, да и есть в shelldetails (см. мой тамошний скрин).

#162:  Author: yozhikLocation: Электросталь PostPosted: Fri Sep 08, 2017 21:22
    —
Flasher wrote:
Author - это авторы (массив), он не может обрабатываться как строка.

Вот, спасибо от души. Теперь понятно Smile Интересно было бы разобраться, как в этом случае массив обрабатывать, но времени нет, к сожалению.

#163:  Author: FlasherLocation: Москва PostPosted: Fri Sep 08, 2017 22:22
    —
yozhik
Я раньше пробовал работать как с массивами, не выходило. На VB ещё можно, на VBS-е вряд ли. Проще взять shelldetails.
Если нужно отсеивать, то проще смотреть по IsArray(). Также можно проверять тип по Vartype(). 8192(массив)+8(строковый)/17(байтовый) и т. д.

#164:  Author: yozhikLocation: Электросталь PostPosted: Sat Sep 09, 2017 11:22
    —
Flasher
Спасибо большое.
Ещё скажите, пожалуйста, в начале скрипта у Вас:
Code:
Reg.Pattern = "^(do[ct][xm]?|xl[st][xm]?|p[op]t[xm]?|vsd)$"

Это, как я понял, Вы расширение проверяете у файла. Но у плагина в options.ini для этой, кажется, цели есть параметр extensions=. Что, плагин фильтрует некачественно? Или другая цель? Вопрос без подвоха, действительно интересно.

#165:  Author: FlasherLocation: Москва PostPosted: Sat Sep 09, 2017 14:22
    —
yozhik
WACP фильтрует, SCP нет, а т. к. он в отличии от WACP не берёт данные из кэша, то есть смысл в нём использовать.

#166:  Author: Mailk PostPosted: Wed Sep 27, 2017 00:41
    —
Flasher wrote:
yozhik
Проще взять shelldetails.

Не взять ,если в вин 64х использую ТС 32х , так как не все плагины есть в ТС Х64. А shelldetails., не работает в такой связке. Есть аналог ? Или скрипт с перекрывающий возможности shelldetails.

#167:  Author: Aquila PostPosted: Wed Sep 27, 2017 07:53
    —
Mailk wrote:
Не взять ,если в вин 64х использую ТС 32х , так как не все плагины есть в ТС Х64. А shelldetails., не работает в такой связке.

У меня работет, что я делаю не так?

#168:  Author: Pr8da21r PostPosted: Wed Sep 27, 2017 13:53
    —
Flasher, ваш скрипт просто супер, пользуюсь им каждый день, но есть одна проблема.
Он не ищет каталоги, только файлы.
Вы не подскажите, как можно это исправить?

#169:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Sep 27, 2017 14:04
    —
Pr8da21r
Оверквотинг на форуме (включая цитирование скриптов) запрещён. Цитата заменена ссылкой.

#170:  Author: Zmy PostPosted: Fri Sep 29, 2017 21:41
    —
Pr8da21r, так этот скрипт работает и с каталогами.

Вам нужно настроить правильно файл конфигурации.
Находите в файле options.ini свою секцию.
Смотрите сначала эту секцию ActiveScripts. Дальше находите в этих ячейках свой скрипт (секцию).
Отправляетесь к ней, и устанавливаете для параметра FoldersPaths значение равное единице.
У меня вот так.

Code:
ActiveScripts=FindO

[FindO]
Script=FindO.vbs
content=FindO
extensions=*
FoldersPaths=1



И в файле-списке не должно быть завершающего слэша.
.

#171:  Author: Skif_off PostPosted: Sat Sep 30, 2017 01:19
    —
Gentoo69
В продолжение этой темы, что-то не так с работой с AutoIt, вне плагина скрипт работает нормально, с плагином - AutoIt жалуется на $aMediaInfo[0] и завершается.

Сделал с $CmdLine[1], чтобы проще было повесить на кнопку (проверять с любым видео-файлом), MediaInfo.dll нужно положить рядом или поправить путь в начале
Code:
#NoTrayIcon

Local $aMediaInfoGet, $content = '', $hDLL, $iHeight, $iWidth, $sRotation
Local $aMediaInfo

$hDLL = DllOpen(@ScriptDir & '\MediaInfo.dll')
$aMediaInfo = DllCall($hDLL, 'ptr', 'MediaInfo_New')
DllCall($hDLL, 'dword', 'MediaInfo_Open', 'ptr', $aMediaInfo[0], 'wstr', $CmdLine[1])
$aMediaInfoGet = DllCall($hDLL, 'wstr', 'MediaInfo_Get', 'ptr', $aMediaInfo[0], 'int', 1, 'int', 0, 'wstr', 'Rotation', 'int', 1, 'int', 0)
$sRotation = $aMediaInfoGet[0]
If ($sRotation = '0.000') Or ($sRotation = '') Then
    $aMediaInfoGet = DllCall($hDLL, 'wstr', 'MediaInfo_Get', 'ptr', $aMediaInfo[0], 'int', 1, 'int', 0, 'wstr', 'Width', 'int', 1, 'int', 0)
    $iWidth = $aMediaInfoGet[0]
    $aMediaInfoGet = DllCall($hDLL, 'wstr', 'MediaInfo_Get', 'ptr', $aMediaInfo[0], 'int', 1, 'int', 0, 'wstr', 'Height', 'int', 1, 'int', 0)
    $iHeight = $aMediaInfoGet[0]
    If $iWidth < $iHeight Then $content = 'Achtung!'
Else
    $content = 'Achtung!'
EndIf
DllCall($hDLL, 'none', 'MediaInfo_Close', 'ptr', $aMediaInfo[0])
DllClose($hDLL)
MsgBox(4096, '', $content)

Для плагина сделал так
Code:
#NoTrayIcon
Local $aMediaInfoGet, $content = '', $hDLL, $iHeight, $iWidth, $sRotation
Local $aMediaInfo

$hDLL = DllOpen(@ScriptDir & '\MediaInfo.dll')
$aMediaInfo = DllCall($hDLL, 'ptr', 'MediaInfo_New')
DllCall($hDLL, 'dword', 'MediaInfo_Open', 'ptr', $aMediaInfo[0], 'wstr', $filename)
$aMediaInfoGet = DllCall($hDLL, 'wstr', 'MediaInfo_Get', 'ptr', $aMediaInfo[0], 'int', 1, 'int', 0, 'wstr', 'Rotation', 'int', 1, 'int', 0)
$sRotation = $aMediaInfoGet[0]
If ($sRotation = '0.000') Or ($sRotation = '') Then
    $aMediaInfoGet = DllCall($hDLL, 'wstr', 'MediaInfo_Get', 'ptr', $aMediaInfo[0], 'int', 1, 'int', 0, 'wstr', 'Width', 'int', 1, 'int', 0)
    $iWidth = $aMediaInfoGet[0]
    $aMediaInfoGet = DllCall($hDLL, 'wstr', 'MediaInfo_Get', 'ptr', $aMediaInfo[0], 'int', 1, 'int', 0, 'wstr', 'Height', 'int', 1, 'int', 0)
    $iHeight = $aMediaInfoGet[0]
    If $iWidth < $iHeight Then $content = 'Achtung!'
Else
    $content = 'Achtung!'
EndIf
DllCall($hDLL, 'none', 'MediaInfo_Close', 'ptr', $aMediaInfo[0])
DllClose($hDLL)

в options.ini
Code:
...
au3=%COMMANDER_PATH%\Plugins\wdx\WinScriptsAdv_wdx\Scripts\AutoIt3.exe
...
[RotationAutoIt]
Script=MediaInfo.au3
content=Rotation
extensions=3gp|asf|avc|avi|d2v|dat|divx|flv|m4v|mkv|mov|mp4|mpe|mpeg|mpg|ts|vob|webm|wmv
FoldersPaths=0

всё остальное по умолчанию.

P.S. Проверяю с AutoIt 3.3.8.1

#172:  Author: Pr8da21r PostPosted: Mon Oct 02, 2017 18:43
    —
Zmy, большое спасибо за помощь.
Всё заработало.

#173:  Author: Zmy PostPosted: Mon Oct 02, 2017 19:56
    —
Пожалуйста.

#174:  Author: NtX PostPosted: Sat May 11, 2019 15:07
    —
Появилась задача вывести в колонку данные из имени файла, которые расположены между квадратными скобками. Т.е. если имя файла "xxx [1234].xxx", то нужно вывести 1234. Как сделать это через AutoIt я себе представляю. Но написано, что через exe парсер будет всё рабоать значительно медленнее. Насколько медленнее в рамках моей задачи? Стоит заморачиваться и делать через COM? Задача-то вроде несложная - взять имя фала/папки, перебрать до символа [, взять всё что за ним до символа ], ну и всё по сути) Просто я с VBS и не работал никогда - может кто поможет, если смысл есть делать именно через него?

#175:  Author: FlasherLocation: Москва PostPosted: Sat May 11, 2019 15:31
    —
NtX
Scripts\NumberInSquareBrackets.vbs:
Code:
Name = Mid(FileName, InStrRev(FileName, "\") + 1)
With New Regexp
  .Pattern = "\[(\d+)\]" : If .Test(Name) Then Content = .Execute(Name)(0).Submatches(0)
End With

options.ini wrote:
[Script]
ActiveScripts=...
|NumberInSquareBrackets

[NumberInSquareBrackets]
Script=NumberInSquareBrackets.vbs
content=Число в квадратных скобках
extensions=*

#176:  Author: NtX PostPosted: Sat May 11, 2019 15:40
    —
Ух ты, работает!
Спасибо большое!)

Пара моментов.
1) В TC кириллица "Число в квадратных скобках" выводится крякозяблями там, где колонки выбираешь. Заменил просто на латинницу.
2) Если добавить настройку FoldersPaths=1, то при настройке (выборе содержимого) новой колонки TC зависает. Выкрутился так: сначала настраиваем колонку без этой опции, потом добавляем опцию, перезагружаем TC - папки тоже начинают обрабатываться.

#177:  Author: FlasherLocation: Москва PostPosted: Sat May 11, 2019 16:43
    —
1) Никто с таким тут ещё не сталкивался. Кириллица отображается как надо. Вы, случаем, у options.ini кодировку не сменили?
2) Вместо перезапуска пользуйтесь cm_UnloadPlugins.
Кстати, можно смело vbs заменить на js:
Code:
arr=filename.match(/\[(\d+)][^\\]*$/);if(arr!=null)content=arr[1]


Last edited by Flasher on Sat May 11, 2019 20:11; edited 1 time in total

#178:  Author: NtX PostPosted: Sat May 11, 2019 19:24
    —
Плагин просто сам поставился и всё. Кодировка у options.ini UTF-8, конец строки CLRF.

#179:  Author: FlasherLocation: Москва PostPosted: Sat May 11, 2019 19:26
    —
Плагин-то поставился, только правку надо делать в исходной кодировке (ANSI), а не UTF-8.

#180:  Author: NtX PostPosted: Sat May 11, 2019 19:51
    —
Ваша правда. Правка в ANSI адекватна. Вопрос закрыт.

js парсит, но только имена файлов. Имена папок обрабатываться не хотят.

#181:  Author: FlasherLocation: Москва PostPosted: Sat May 11, 2019 20:12
    —
NtX wrote:
Имена папок обрабатываться не хотят.
Дело не в папках, а концевом расположении квадратных скобок. Заменил последний + на * в регулярке.

#182:  Author: NtX PostPosted: Sat May 11, 2019 23:54
    —
Да, это срабатывает. Спасибо за разъяснения!

#183:  Author: Dimsok PostPosted: Sun Aug 04, 2019 01:57
    —
http://gnuwin32.sourceforge.net/downlinks/coreutils.php

wc.exe - программа для вывода количества строк, слов, символов текстовых файлов. Возможно приспособить её для вывода этих значений в колонки?

#184:  Author: FlasherLocation: Москва PostPosted: Sun Aug 04, 2019 09:23
    —
wc (для UnxUtils не нужна libintl3.dll) не справляется с UTF-кодировками при подсчёте символов и слов. Для ANSI число символов эквивалентно числу байт, там и думать не надо. Вообще со словами не всё однозначно. Надо перепроверять с разными делителями, цифрами и т. д.
Число строк см. здесь.

#185:  Author: Dimsok PostPosted: Mon Aug 05, 2019 02:45
    —
Мне то важнее как раз был подсчёт слов.

#186:  Author: FlasherLocation: Москва PostPosted: Mon Aug 05, 2019 14:06
    —
Ну, сформулируй, что не считать словами, т. к. wc всякую ерунду к ним причисляет.

#187:  Author: Dimsok PostPosted: Tue Aug 06, 2019 02:06
    —
Проверил ещё, у меня wc работает с utf8, utf16.

Словами не считать пробелы.

#188:  Author: FlasherLocation: Москва PostPosted: Tue Aug 06, 2019 02:19
    —
Работает, но некорректно.

Т.е. 11111, 938402, &^%#^*))@!, ////// — это слова?

#189:  Author: Dimsok PostPosted: Tue Aug 06, 2019 02:33
    —
Так же, как с ansi. Погрешности вполне приемлемы.
Ещё хотелось бы знать, возможно ли использование в паре с другой программой. Например, кнопка с параметрами:

"%%COMMANDER_PATH%%\Plugins\exe\balabolka\Text extract\balabolka_text" -f "%%#" -o |"%%COMMANDER_PATH%%\Plugins\exe\unxutils\wc.exe" -w -m

Позволяет узнавать количество слов в электронных книгах типа epub, fb2 и т.п, пусть и с задержанием.

Quote:
Т.е. 11111, 938402, &^%#^*))@!, ////// — это слова?


Ну если возможно, можно, конечно, исключить полностью небуквенные сочетания.

#190:  Author: FlasherLocation: Москва PostPosted: Tue Aug 06, 2019 02:58
    —
Quote:
Погрешности вполне приемлемы.
В подсчёте числа символов — не приемлемы. Тем более такие, как в случае с UTF-16.

Балаболка конвертирует epub/fb2 в текстовый файл что ли?

Исключить можно. Но помимо пробела и знаков препинания есть ряд других разделителей. Вот сколько здесь слов, например?:
"Я положил файл в директорию C:\папка!\@папка2\Ad&Remove\354блабла3р5\x\y\z\test и указал * спереди в поле Команда, прописал в регулярном выражении ^(?:name|xxx?|full)\.ext$ но программа не запустилась?"

#191:  Author: Dimsok PostPosted: Tue Aug 06, 2019 03:13
    —
Quote:
Балаболка конвертирует epub/fb2 в текстовый файл что ли?

Утилита от её создателя. Именно так, их, и ещё много разных других.

21, если не считать словами те случаи, когда между ними нет пробелов.

#192:  Author: FlasherLocation: Москва PostPosted: Mon Sep 02, 2019 23:18
    —
А я тут вижу 34 буквенных "слова". Набросал следующее:
Code:
;::::::::::::::::::::::::::::::: SWLcount.au3 ::::::::::::::::::::::::::::::
; Назначение: получение числа символов, слов, строк для информационных полей

; Положить blb2txt.exe в %COMMANDER_PATH%\Plugins\wdx\WinScriptsAdv\Scripts\
; Программа доступна по следующей ссылке:  http://balabolka.site/blb2txt.zip
; Поддержка: azw, azw3, chm, djvu, doc(x), eml, epub, fb2, fb3, htm(l), odp,
; ods, odt, mobi, litmht, pdb, pdf, ppt(x), prc, rtf, tcr, wpd, wri, xls(x),
; а также любых текстовых файлов по списку заданных в options.ini расширений
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#NoTrayIcon
Opt('MustDeclareVars', 1)
Dim $FileName
If FileGetSize($FileName) = 0 Then
  $FileName = ObjCreate('Shell.Application').NameSpace(0).ParseName($FileName).ExtendedProperty('LinkTarget')
  If Not $FileName Then Exit
  If Not FileGetSize($FileName) Then Exit
EndIf
Dim $Ext, $PID, $Text, $Text2, $Content, $Content1, $Content2
$Ext = StringRegExp($FileName, '((?<=\.)[^.]+|)$', 1)[0]
If Not $Ext Then Exit
If StringInStr('|azw|azw3|chm|djvu|doc|docx|eml|epub|fb2|fb3|htm|html|lit|mht|mobi|odp|ods|odt|pdb|pdf|ppt|pptx|prc|rtf|tcr|wpd|wri|xls|xlsx|', '|' & $Ext & '|', 2) Then
  $PID = Run('"' & EnvGet('COMMANDER_PATH') & '\Plugins\wdx\WinScriptsAdv\Scripts\blb2txt.exe" -f "' & $FileName & '" -o -rpn -sn -ss','', 0, 2)
  While 1
    $Text = StdoutRead($PID, 1)
    If $Text Then
      If $Text = $Text2 Then ExitLoop
    EndIf
    $Text2 = $Text
  WEnd
  $Text2 = ''
  StdioClose($PID)
Else
  Dim $oFile
  $oFile = FileOpen($FileName)
  $Text  = FileRead($oFile)
  FileClose($oFile)
EndIf
$Content  = StringLen($Text)
$Content1 = UBound(StringRegExp($Text,'\R', 3)) + 1
$Content2 = UBound(StringRegExp($Text,'\p{L}+-?\p{L}*', 3))
$Text = ''

options.ini wrote:
[Script]
ActiveScripts=...|SymbolsWordsLinesCount

; тут остальное

[SymbolsWordsLinesCount]
Script=SWLCount.au3
content=Символов
content1=Строк
content2=Слов
extensions=azw|azw3|bar|chm|cfg|conf|djvu|doc|docx|eml|epub|fb2|fb3|inf|ini|ion|htm|html|lit|lng|log|lst|me|mht|mobi|odp|ods|odt|pdb|pdf|ppt|pptx|prc|rtf|tcr|text|txt|wpd|wri|xls|xlsx
|etc
FoldersPaths=0
См. корректность значения ключа au3. Вместо etc дописываем свои нужники.
Как и ожидалось, получаем сопутствующие тормоза. В колонки выводить, наверное, не стоит. На больших/mobi будут наблюдаться вылеты балаболки. Лучше — в подсказках.

#193:  Author: dzigloTC PostPosted: Thu Jul 09, 2020 08:00
    —
Доброе утро всем участникам.
В отделе «Общие вопросы» я открыл тему, но меня оттуда направили сюда. Поэтому копирую свой вопрос здесь.

Прошу помочь в насущном для меня вопросе.
В ТС возможен поиск текста внутри word-файлов в различной кодировке.
А как можно искать текст в файлах формата djvu? Может есть хотя бы какие-нибудь плагины и т.п.?
Очень нужно. Много djvu-файлов книг и в них нужно часто искать слова и фразы.

#194:  Author: FlasherLocation: Москва PostPosted: Thu Jul 09, 2020 08:46
    —
dzigloTC
Технически тут поиск возможен по заранее заданным шаблонам (в коде или соседнем списке), а не через диаложное поле поиска. Если подобное устраивает, то в последнем скрипте нужно править только нижние строки с $Content. Если нет, то тогда нужно внедрять blb2txt в PCREsearch и там что-то придумывать.

#195:  Author: dzigloTC PostPosted: Thu Jul 09, 2020 10:10
    —
Flasher wrote:
dzigloTC
Технически тут поиск возможен по заранее заданным шаблонам (в коде или соседнем списке), а не через диаложное поле поиска. Если подобное устраивает, то в последнем скрипте нужно править только нижние строки


Вы не могли бы подробнее рассказать, как это сделать? Я в плагинах ТС вообще ничего не понимаю.

#196:  Author: AvadaLocation: Россия, Саратов PostPosted: Thu Jul 09, 2020 13:05
    —
dzigloTC
Замечание за нарушение правил форума. Ровно никакой повышенной важности ваше выделение полужирным шрифтом не имело. Сообщение приведено к приемлемому состоянию. Кроме того, вы злоупотребляете ненужным цитированием.

#197:  Author: FlasherLocation: Москва PostPosted: Thu Jul 09, 2020 23:54
    —
dzigloTC wrote:
Вы не могли бы подробнее рассказать, как это сделать?
Для начала установить плагин по общим правилам (1, 2, 3).
Потом закинуть этот (с лёгкой правкой предыдущего) скрипт в ...\Plugins\wdx\WinScriptsAdv\Scripts\, выполнив предписания из шапки ¹:
 TextSearch.au3

 Отредактировать options.ini из корневой папки плагина по схожему принципу:
Перезапустить ТС и искать на вкладке Плагины по принципу:
winscriptsadv | Заголовок 1 | Рег. выраж. | ^[1-9]

#198:  Author: Segmentum PostPosted: Mon Nov 30, 2020 00:17
    —
Можно ли использовать в скриптах для WinScript Advanced данные из других wdx плагинов Total Commander?

#199:  Author: Skif_off PostPosted: Sun Dec 06, 2020 08:47
    —
Segmentum
Можно, тут писал, как.

#200:  Author: Zmy PostPosted: Mon Dec 07, 2020 18:05
    —
Skif_off, вы не поняли тонкий троллинг.

Для чего такое делать?

Не легче ли создать свой собственный набор колонок?
С любыми полями, из любых плагинов.

С помощью стандартных средств такого, как хочет TS, сделать невозможно.
Чтобы такое делать, нужно понимать, как Гислер подгружает плагины.

Для чего нужны посредники?

Такое можно сделать, но возникает вопрос:

Зачем создавать сложное, если можно сделать лёгкое?

#201:  Author: Skif_off PostPosted: Mon Dec 07, 2020 19:40
    —
Zmy wrote:
Не легче ли создать свой собственный набор колонок?
С любыми полями, из любых плагинов.

Суть в том, что данные поля(ей) необходимо как-то использовать и выдать полученный результат. Либо существующие плагины не предоставляют необходимого.
Zmy wrote:
С помощью стандартных средств такого, как хочет TS, сделать невозможно.
Чтобы такое делать, нужно понимать, как Гислер подгружает плагины.

Плагин - это просто dll'ка с расширением w?x, в ряде случаев её можно запросто загрузить и вызывать её функции самыми что ни на есть стандартными средствами (точно так же их и Гислер подгружает).

В принципе, разнообразные данные можно получать с помощью консольных утилит, тупо запуская и читая их вывод, без использования других wdx-плагинов напрямую (хотя они и могут упростить).

#202:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Feb 24, 2021 18:46
    —
Из другой ветки:
Monarch-LFV wrote:
Возникла необходимость вытаскивать содержимое определеной ячейки в файле Excel (например "Лист1!C12")

Эх, давно не брал я шашки в руки Smile
Code:
'=================================================
' Script for WinScriptAdv content plugin

' Возвращает значение ячейки Excel
'=================================================

'========== Изменяемые параметры =================
Const Addr = "Лист1!C12"  ' Адрес ячейки
'=================================================

content = Result(filename, Addr)

Function GetCellValue(pXl, pFile, pAddr)
  pXl.Visible = False
  pXl.DisplayAlerts = False
  Call pXl.Workbooks.Open(pFile, , True)
  GetCellValue = pXL.Range(pAddr)
End Function

Function Result(pFile, byVal pAddr)
  Dim objXL
  Set objXL = CreateObject("Excel.Application")
  On Error Resume Next
  Result = GetCellValue(objXL, pFile, pAddr)
  On Error Goto 0
  objXL.Quit()
  Set objXL = Nothing
End Function

#203:  Author: Monarch-LFV PostPosted: Thu Feb 25, 2021 17:13
    —
Batya
Спасибо, очень круто получилось, несмотря на то, что уже сам реализовал на VBA в Экселе. В VBS сам не силен, несмотря на то, что вроде близкие языки.
Мне уже особо не нужно, но ради интереса можно развить тему, просто номер строки не обязательно может быть 12, как в примере. В качестве примера, представьте себе сметы, где разное количество строк, где-то 11, где-то 100, где-то 123... Но в конце, например в столбце "B" всегда имеется фраза "Итого по смете:", так вот например нужно получить значение в этой строке в столбце "C".

#204:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Feb 25, 2021 19:28
    —
Monarch-LFV
Без проблем:
Code:
'=================================================
' Script for WinScriptAdv content plugin

' Возвращает значение последней ячейки Excel в указанном столбце
'=================================================

'========== Изменяемые параметры =================
Const Addr = "Лист1!C"  ' Адрес ячейки без строки
'=================================================

content = Result(filename, Addr)

Function GetCellValue(pXl, pFile, pAddr)
  Dim lRow, lSh
  pXl.Visible = False
  pXl.DisplayAlerts = False
  Call pXl.Workbooks.Open(pFile, , True)
  If InStr(pAddr, "!") > 0 Then
    Set lSh = pXl.Worksheets(Left(pAddr, InStr(pAddr, "!") - 1))
  Else
    Set lSh = pXl.ActiveSheet
  End If
  lRow = lSh.UsedRange.Find("*", , , , , 2).Row
  GetCellValue = lSh.Range(pAddr & CStr(lRow))
  Set lSh = Nothing
End Function

Function Result(pFile, byVal pAddr)
  Dim objXL
  Set objXL = CreateObject("Excel.Application")
  On Error Resume Next
  Result = GetCellValue(objXL, pFile, pAddr)
  On Error Goto 0
  objXL.Quit()
  Set objXL = Nothing
End Function

#205:  Author: Mailk PostPosted: Fri Feb 26, 2021 03:38
    —
А у меня бухгалтерские pdf счета.
Нужно вывести в столбец данны по ним .
Реально такое?

#206:  Author: Monarch-LFV PostPosted: Fri Feb 26, 2021 08:27
    —
Batya
Немного не то. Здесь вы ищете просто последнюю строку, а нужно номер строки, в которой в столбце "B" фраза "Итого по смете:". Она может быть далеко не последней (после нее могут быть поля для подписи например).
Для понимания, если написать формулой в экселе, то получилось бы следующее:
Code:
=ВПР("Итого по смете:";B:C;2;ЛОЖЬ)


Mailk
Уже ведь обсуждали в ветке http://forum.wincmd.ru/viewtopic.php?t=15967&postdays=0&postorder=asc&&start=30
Или вышлете пример, я посмотрю.

#207:  Author: Monarch-LFV PostPosted: Sat Feb 27, 2021 06:02
    —
Batya
На основе вашего кода написал нужный мне код:
Code:
''=================================================
' Script for WinScriptAdv content plugin

' Возвращает значение найденной ячейки Excel в указанном столбце
' по принципу =ВПР("Итого по смете:";B:C;2;ЛОЖЬ)
'=================================================

'========== Изменяемые параметры =================
Const Addr = "Лист1!C"  ' Адрес ячейки без строки
Const columnConst = "B:B"  ' В каких столбцах должно быть найдено постоянное значение
Const ValueConst = "Итого по смете:"  ' Само постоянное значение
'=================================================

content = Result(filename, Addr)

Function GetCellValue(pXl, pFile, pAddr)
  Dim lRow, lSh
  pXl.Visible = False
  pXl.DisplayAlerts = False
  Call pXl.Workbooks.Open(pFile, , True)
  If InStr(pAddr, "!") > 0 Then
    Set lSh = pXl.Worksheets(Left(pAddr, InStr(pAddr, "!") - 1))
  Else
    Set lSh = pXl.ActiveSheet
  End If
  lRow = lSh.Range(columnConst).Find(ValueConst, , , , , 1).Row
  GetCellValue = lSh.Range(Addr & lRow)
  Set lSh = Nothing
End Function

Function Result(pFile, byVal pAddr)
  Dim objXL
  Set objXL = CreateObject("Excel.Application")
  On Error Resume Next
  Result = GetCellValue(objXL, pFile, pAddr)
  On Error Goto 0
  objXL.Quit()
  Set objXL = Nothing
End Function

Спасибо за наводку!

#208:  Author: Monarch-LFV PostPosted: Sun Feb 28, 2021 05:48
    —
Немного разобравшись, написал еще один скрипт для плагина, может кому-нибудь пригодится (похож на работу плагина Expander2):
Code:
' Script for WinScriptAdv content plugin
'
' Разделяет имена папок и файлов по заданному разделителю

'========== Изменяемые параметры =================
Const Separator = " - "
'=================================================

Dim fs, f, fn
on error resume next
Set fs = CreateObject("Scripting.FileSystemObject")
Set f  = fs.GetFolder(filename)
fn = f.name ' Имя папки
fn = fs.GetBaseName(filename) ' Имя файла

content = fn ' Полное имя файла
content1 = split(fn, Separator)(0) ' Часть 1
content2 = split(fn, Separator)(1) ' Часть 2
content3 = split(fn, Separator)(2) ' Часть 3

#209:  Author: Orion9 PostPosted: Tue Feb 13, 2024 12:55
    —
Плагин поддерживает Unicode?

Пытаюсь запустить в нем AutoHotkey второй версии.

Вижу, что он создает файл во временном каталоге WinScriptAdvFile_.ahk в формате ANSI, что приводит к утере уникодных имен файлов в переменной filename и неработаспособности файловых функций.

Как решить проблему?

#210:  Author: Monarch-LFV PostPosted: Wed Mar 13, 2024 13:52
    —
Заметил, что плагин на разных windows ведет себя по разному. В options.ini оставил одну запись:
Code:
[Script]
ActiveScripts=Test

[Test]
Script=Test.vbs
content=Test
extensions=*
FoldersPaths=0

В файле Test.vbs просто:
Code:
content = 1

При добавлении колонки поведение следующее:
1. Win7x64: TCх32 - при первом (!) обращении в диалоговом окне выпадает ошибка:
Code:
Crash in plugin WinscriptsADV.wdx:
External exception EEDFADE

После добавления колонки, не смотря на ошибку все работает как надо и повторно такая ошибка не выдается.

2. Win7x64: TCх64 - тотал сразу падает без каких-либо сообщений.
Текст дампа прилагаю:
 Дамп


3. Win10x64: TCх32 и ТСх64 - никаких ошибок нет.

Может кто-нибудь подтвердить/опровергнуть такое поведение? И как с ним бороться?

#211:  Author: Orion9 PostPosted: Thu Mar 14, 2024 20:16
    —
Quote:
Может кто-нибудь подтвердить/опровергнуть такое поведение?

Уже давно не пользовался Windows 7. Могу только добавить, что в 11-ой такой проблемы нет. Все работает ровно.



Total Commander -> Плагины Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group