Script Content Plugin
Select messages from
# through # FAQ
[/[Print]\]

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

#1: Script Content Plugin Author: Lev PostPosted: Fri Oct 07, 2005 16:25
    —
Script Content Plugin
Позволяет самому писать vbs и js скрипты для получения и обработки информации из файла или для обработки его имени и помещения результата в колонку плагина. Может быть полезен для получения полезной информации из файла или для сортировки файлов в желаемом порядке

Сам плагин очень сырой, но, тем не менее...

Задаем вопросы и обмениваемся скриптами
Параллельная англоязычная тема

#2:  Author: BatyaLocation: Москва, Россия PostPosted: Sat May 13, 2006 13:28
    —
Было бы неплохо не копировать плагин для нескольких результатов, а сделать у одного плагина несколько результатов (колонок).
Например, это можно реализовать, если в script.ini в разделе [Script] переменную Section задавать в виде:
Code:
[Script]
Section=Defaults|Extension|AddZeros|exe-arc up|js

А результат работы скрипта давал бы не одну колонку Result, а несколько колонок, названных по имени секции.

#3:  Author: fundukLocation: Санкт-Петербург PostPosted: Sat May 13, 2006 16:50
    —
Имхо это будет удобнее, но всё равно нельзя сделать количество полей потенциально неограниченным. Пяти имхо достаточно.

#4:  Author: BatyaLocation: Москва, Россия PostPosted: Sat May 13, 2006 17:23
    —
Ну нет!
5 - это крайне мало. 50 - вот это наш размерчик Smile

#5:  Author: Lev PostPosted: Mon May 15, 2006 15:23
    —
Ух, ты! Тема ожила, я думал и оно и ненужно никому Smile

Итого:
в ToDo листе
выводить из одного скрипта не одну колонку, а несколько - result1, result2... (планировал 10 шт.)
включение в скрипт подпрограмм (Sub, Function)
каждый скрипт в свою колонку - не хочется
НО: я не запускал дельфи уже пол-года и не знаю когда ещё запущу Sad

PS - секция Defaults - информационная, ни на что не влияющая, в Script.ini её можно не включать

#6:  Author: BatyaLocation: Москва, Россия PostPosted: Mon May 15, 2006 15:41
    —
Ура, автор присутствует Smile
Что ж, надеемся, что хорошее начинание не будет "почить в бозе".

Тут еще LocKtaR-o-DarK заметил, что память не очищается. В частности, после работы поиска вот с этис скриптом.

#7:  Author: Lev PostPosted: Mon May 15, 2006 15:52
    —
Тут вам не повезло, автор - ленивый script kiddy Sad
посмотреть попробую, обещать ничего не могу

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

#8:  Author: BatyaLocation: Москва, Россия PostPosted: Mon May 15, 2006 16:26
    —
Lev
Жаль Sad

В свою очередь могу постараться почаще прибегать к помощи твоего плагина и почаще выкладывать какие-нибудь скрипты под него.
Прояви, пожалуйста (ну пожааалуйста Smile), немного активности, и, глядишь, плагин заживет активной жизнью! К моим скриптам народ, видимо, уже привык Smile. Настала пора приучить теперь к твоему плагину Very Happy

#9:  Author: Lev PostPosted: Mon May 15, 2006 17:36
    —
Могу, для начала, перезапостить сюда интересные скрипты с оф. форума. Автор большинства скриптов van Dusen.

#10:  Author: BatyaLocation: Москва, Россия PostPosted: Mon May 15, 2006 18:27
    —
ОК.
Выкладывай, только переведи описание.

Приведу еще одну ссылку на использование твоего плагина.
Еще я когда-то приводил скрипт, показывающий 16-тиричное значение первого символа файла. Но позже уже увидел, что аналогичный скрипт есть на оф. форуме. Поэтому свою ссылку искать не буду. Приведи скрипт с оф. форума.

#11:  Author: Lev PostPosted: Tue May 16, 2006 00:23
    —
Ну, начнём потихоньку Smile

ricobautsch

Небольшой скрипт, который может быть полезен для поиска файлов с определенной сигнатурой (первые байты в файле).
Code:
'signatur.vbs by ricobautsch

'Script for Script Content Plugin (c)Lev Freidin, 2005
'http://www.totalcmd.net/plugring/script_wdx.html
'http://wincmd.ru/plugring/script_wdx.html
'
'Этот скрипт показывает первые 10 байт файла в тектовом или hex представлении
'может быть полезен для поиска файлов с определенной сигнатурой
'This script returns the first 10 bytes in the file as text or hex-representation.
'Could be usefull for example to search for files with a specified signatur

const bHex = True
const nCharCnt = 10

Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextStream = fso.OpenTextFile(filename)

If not oTextStream.AtEndOfStream Then
  content_str = oTextStream.Read(nCharCnt)
 
  If bHex Then
    For i=1 To Len(content_str)
      If content <> "" Then
        content = content & " "
      End If
     
      hex_value = Hex(Asc(Mid(content_str,i,1)))
     
      content = content & string(2 - len(hex_value), "0")
      content = content & hex_value
    Next
  Else
    content = content_str
  End If
End If

oTextStream.Close
Для установки количества отображаемых байт/букв и переключения режимов отображения меняйте константы bHex и nCharCnt

#12:  Author: Lev PostPosted: Tue May 16, 2006 00:27
    —
Найти и пометить файлы с одинаковыми именами
Исходное сообщение - http://www.ghisler.ch/board/viewtopic.php?t=8844

Peter

В списке есть исходные данные (например: 1.doc, 2.do3, 3.doc, 4.doc) и их производные (1.pdf, 2.pdf, 3.pdf, 5.pdf).

Требуется выполнить несколько задач:

a) Найти все doc-файлы, к которым нет соответствующего pdf (напр. 4.doc)
b) Найти все pdf-файлы, к которым нет соответствующего doc (напр. 5.pdf)
c) Найти все pdf-файлы старее, чем исходный doc, и соответственно устаревшие
----
van Dusen
Code:
'Script for Script content Plugin
' van Dusen
' (c)Lev Freidin, 2005
' http://www.totalcmd.net/plugring/script_wdx.html
' http://wincmd.ru/plugring/script_wdx.html

Dim fso, f1, f2
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFile(filename)

sBaseIst = lcase(fso.GetBaseName(filename))
sExtIst = lcase(fso.GetExtensionName(filename))
sDateModF1 = f1.DateLastModified
sExtSoll1 = "doc"
sExtSoll2 = "pdf"
Const ForReading = 1


SELECT Case sExtIst

   Case sExtSoll1
      sResult = sExtSoll2 & " - сответствующий файл"
      If fso.FileExists(sBaseIst & "." & sExtSoll2) Then
         Set f2 = fso.GetFile(sBaseIst & "." & sExtSoll2)
         sTimeDiff = DateDiff("n", sDateModF1, f2.DateLastModified)
         If sTimeDiff < 0 Then
            sResult = "2: " & sResult & " устарел"
         Else
            sResult = "1: " & sResult & " свежий"
         End If
         sResult = sResult & " (" & sTimeDiff & " Min. Diff.)"
      Else
         sResult = "3: " & sResult & " отсутствует"
      End If

   Case sExtSoll2     
      If fso.FileExists(sBaseIst & "." & sExtSoll1) Then
         Set f2 = fso.GetFile(sBaseIst & "." & sExtSoll1)
         sTimeDiff = DateDiff("n", sDateModF1, f2.DateLastModified)
         If sTimeDiff > = 0 Then
            sResult = "2: Файл устарел"
         Else
            sResult = "1: Свежий файл"
         End If
         sResult = sResult & " ("& sTimeDiff & " Min. Diff.)"
      Else
         sResult = "3: "& sExtSoll1 &" - соответствующий файл отсутствует"
      End If

   Case Else
      sResult = ""

End SELECT

content = sResult

Set fso=nothing
Set f1=nothing
Set f2=nothing
Лично мне разница во времени не понадобилась, я натравливал скрипт на папку с кучей jpg фоток и соответствующими им обтравленными tif'ами, понравилось Smile

#13:  Author: Lev PostPosted: Wed May 17, 2006 21:34
    —
Относительный путь к файлу
Для использования в режиме BranchView (Ctrl+B), для работы требуется TCScript.Helper
В обсуждении на оф. форуме были и другие варианты
Code:
'relpath.vbs - Show relative path to file in the Branch view (Ctrl+B)
'Script for Script Content Plugin (c)Lev Freidin, 2005
'http://www.totalcmd.net/plugring/script_wdx.html
'http://wincmd.ru/plugring/script_wdx.html
Dim fso, f, tcs

Set fso = CreateObject("Scripting.FileSystemObject")
Set tcs = CreateObject("TCScript.Helper")

f = tcs.GetSrcPath
relpath = left(filename, len(filename) - len(fso.GetFileName(filename)))
relpath = Mid(relpath, Len(f)+1)
content = relpath

Set fso=nothing
Set tcs=nothing

#14:  Author: fundukLocation: Санкт-Петербург PostPosted: Wed Jul 12, 2006 01:13
    —
Ещё скрипт.

#15:  Author: Lev PostPosted: Thu Aug 24, 2006 18:43
    —
Шоб не потерялось Smile
Пометить файлы/папки

[off]funduk Хорошо бы в дополнение к ссылкам давать краткое описание[/off]

#16:  Author: Lev PostPosted: Wed Aug 30, 2006 11:32
    —
Переименование файлов по содержимому (Исходная тема (Нем.))

Q. У меня есть автоматически пронумерованые текстовые файлы (1.txt, 2.txt,…), в первой строке содержимого которых в кавычках содержится их настоящее имя.
Могу ли я выкусить имена и переименовать их?

ricobautsch
Code:
Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextStream = fso.OpenTextFile(filename)

If not oTextStream.AtEndOfStream Then
  s = oTextStream.ReadLine
  Pos1 = InStr(1, s, """")
  Pos2 = InStrRev(s, """")
  If (Pos1 > 0) and (Pos2 > Pos1) Then
    content = Mid(s, Pos1 + 1, Pos2 - Pos1 - 1)
  Else
    content = "not found"
  End If
End If

oTextStream.Close

Скрипт ищет в первой строке файла кавычки (“) и возвращает заключённый в них текст.

Теперь легко произвести мультипереименование.

#17:  Author: valexiev PostPosted: Thu Feb 15, 2007 03:41
    —
Еще желание для Script_WDX: как-то задавать ТИП результата. А то иначе Командир в фильтрах всегда третирует script.Result как стринг, и соответственно операции стринговъе (contains, equal, regexp). Иногда полезно чтоб результат бъл числовъм (<, >).

Вот например в моем скрипте для изчисления разницъ дат до "базового" файла я бъл заставлен добавить к результату значок (+) или (-) в зависимости от разницъ, чтоб можно бъло потом сделать фильтр для раскрашивания.

#18:  Author: Lev PostPosted: Thu Feb 15, 2007 19:29
    —
Мне не нравятся результаты округления числовых значений возвращяемых контентными плагинами, поэтому в своих плагинах работающих только с числами, я всё равно возвращаю стринг. В ToDo занесу, сделать не обещаю.

#19:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Mar 26, 2007 10:53
    —
Lev
Тут появилась идея - в параметре Script иметь возможность задавать параметры для скрипта, например:
Code:
Script=My_Script.vbs 1

Где 1 - режим работы скрипта. Будет актуально, если ты всё же сделаешь возможность возврата нескольких результатов одним плагином.
В принципе, можно и добавить какой-нибудь параметр, например, Params:
Code:
Script=My_Script.vbs
Params=1 2 3 4

или
Code:
Script=My_Script.vbs
Param1=1
Param2=2
Param3=3
Param4=4

#20:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Mar 26, 2007 11:27
    —
Еще идея - а почему имя инишника всегда script.ini? Если имя инишника делать по имени файла плагина, то в одной папке можно хранить несколько wdx-ов.

Или ...

Еще вариант - передавать в скрипт имя файла вызвавшего его плагина - для использования одного скрипта с несколькими файлами плагина. Т.е. в одной папке лежит один скрипт, один инишник и несколько wdx.


Новый скрипт - http://forum.wincmd.ru/viewtopic.php?p=26601#26601.

#21:  Author: Lev PostPosted: Mon Mar 26, 2007 16:26
    —
Quote:
а почему имя инишника всегда script.ini?
При программировании, задал жестко. Потом люди захотели нескольких экземпляров плагина - придумал обходной путь, в код даже и не влезал...
переделать имхо несложно, но времени нет. На данный момент сделал поддержку sub's и function's в скрипте, потом стал привинчивать многоколоночность и попортил, то что было.
Про передачу параметров надо думать.

#22:  Author: Lev PostPosted: Fri Mar 14, 2008 18:50
    —
Пример передачи параметров скрипту через интерфейс настройки колонок
Пример привинчивания AHK скрипта, в данном случае показывает информацию о фрагментированности файлов.

#23:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Jun 04, 2008 14:44
    —
На всякий случай - Поиск по списку.

Lev
Не мог бы ты прикрутить принудительный выход из скрипта, типа WScript.Quit? Просто, если возвращаемое значение уже определено, не очень красиво дальше вешать кучу if-ов.

#24:  Author: Lev PostPosted: Wed Jun 04, 2008 15:40
    —
Не очень понял, давно ничего не скриптовал :(
а разве средствами vbs нельзя завершить скрипт или принудительно ускакать в его хвост?

#25:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Jun 04, 2008 17:55
    —
Lev
Пинудительное завершение WScript.Quit выдает ошибку, а принудительно ускакать можно только с помощью обрамляющих if-ов, отчего код не очень красиво выглядит.

#26:  Author: Lev PostPosted: Thu Jun 05, 2008 12:58
    —
А обрамление в sub/end sub с exit sub в местах выхода - красиво? (то же самое для function)
А в основном блоке соответственно просто вызов процедуры/функции.

#27:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Jun 05, 2008 15:46
    —
Lev
Хм. Отлично!

Добавлено:
Переделал, с учетом новой идеи, скрипт поиска по списку. По-моему, так даже на порядок красивее Smile (функции можно называть по имени возвращаемой колонки):
Code:
'============================
' Колонка Result будет возвращать признак наличия файла\каталога в указанном файле-списке:
'   0 - файл\каталог НЕ найден; 1 - файл\каталог найден
'=== Изменяемые параметры ===
Const FileList = "C:\FileList.txt" 'Файл-список
'============================

Dim FSO
Const ForReading = 1
content = Result
Set FSO = Nothing

Function Result
  Dim List, dlm
  Result = 0
  Set FSO = CreateObject("Scripting.FileSystemObject")
  If Not FSO.FileExists(FileList) Then
    Exit Function
  End If
 
  On Error Resume Next
  List = FSO.OpenTextFile(FileList, ForReading, False).ReadAll
  If Err.Number <> 0 Then
    Exit Function
  End If
  On Error GoTo 0
 
  dlm = vbNewLine
  If InStr(1, dlm & List & dlm, dlm & filename & dlm, vbTextCompare) > 0 Then
    Result = 1
  End If
End Function

#28:  Author: stal1n PostPosted: Sat Mar 28, 2009 10:30
    —
пожалуйста покажите кто-нибудь свой рабочий script.ini
я никак не могу настроить ни один скрипт Sad

если можно, напишите как правильно подключать скрипты

#29:  Author: stal1n PostPosted: Fri Apr 03, 2009 12:37
    —
неужели никто не поможет?

#30:  Author: Lev PostPosted: Fri Apr 03, 2009 15:37
    —
В поставке по-умолчанию вполне себе рабочий script.ini, в котором подключен скрипт ext.vbs, выдающий результаты для ps, eps, htm, url и т.п. файлов.
Методы установки, подключения и использования плагина практически не отличаются от остальных контентных wdx плагинов. Эти методы раскрыты в хелпе и неоднократно на страницах форума, переписывать их лишний раз и в эту тему не вижу необходимости.
Лучше опишите, что и как Вы делаете и что у Вас не получается.

#31: signatur.vbs Author: Anger PostPosted: Thu Apr 29, 2010 16:58
    —
Lev, спасибо за скрипт на первой странице - пригодился.
Lev wrote:
Небольшой скрипт, который может быть полезен для поиска файлов с определенной сигнатурой (первые байты в файле).
...
content = content_str
...


Если в получаемой строке есть символы hex(00) (как например в первых 3 байтах контейнера MP4) - в текстовом виде строка вообще не выводится.

Поэтому нужно заменить на
content=Replace(content_str,Chr(0),Chr(1))
или на
content=Replace(content_str,Chr(0)," ")

Немного доработал скрипт ув.ricobautsch:
Code:
'signatur.vbs by ricobautsch
'edited by Anger 29.04.2010

'Script for Script Content Plugin (c)Lev Freidin, 2005
'http://www.totalcmd.net/plugring/script_wdx.html
'http://wincmd.ru/plugring/script_wdx.html
'
'Этот скрипт показывает 11 байт файла (nCharCnt=11) начиная с начала (nCharStart=0) в hex
'и тектовом представлении - может быть полезен для поиска файлов с определенной сигнатурой
'Возвращаемые параметры: Result=HEX, Result1=Text

const nCharStart = 0
const nCharCnt = 11

Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextStream = fso.OpenTextFile(filename)

oTextStream.Skip(nCharStart)
If not oTextStream.AtEndOfStream Then
  content_str = oTextStream.Read(nCharCnt)

' Выводим Text в result1
  content1=Replace(content_str,Chr(0),Chr(1))

' Выводим HEX в result
    For i=1 To Len(content_str)
      If content <> "" Then
        content = content & " "
      End If
     
      hex_value = Hex(Asc(Mid(content_str,i,1)))
     
      content = content & string(2 - len(hex_value), "0")
      content = content & hex_value
    Next
'Else
'  content="EOF"
'  content1="EOF"
End If

oTextStream.Close


PS. Использую для поиска видео-файлов из кеша оперы.
Wincmd.ini
Code:
[Searches]
Video по содержимому > 500 кБ_SearchFor=
Video по содержимому > 500 кБ_SearchIn=
Video по содержимому > 500 кБ_SearchText=
Video по содержимому > 500 кБ_SearchFlags=0|000002000020|||||1|500|1||0000|
Video по содержимому > 500 кБ_plugin=script.Result1 contains FLV | script.Result1 contains mp4 | script.Result1 contains 3gp | script.Result1 contains AVI


Last edited by Anger on Fri Apr 30, 2010 10:03; edited 5 times in total

#32:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 25, 2010 16:12
    —
В продолжение обсуждения в теме "Поиск папок с частично одинаковыми названиями" хотелось бы вернуться к вопросу возможности произвольно именовать колонки результатов.
Также хотелось бы увеличения количества колонок результатов.

Lev
Если не хочется запуска некольких скриптов, сделай приём результатов из скрипта, например, через ассоциированный массив (объект "Scripting.Dictionary"), у которого ключ - это имя результирующей колонки. Т.е. нечто вроде
Code:
content.Add "Новая колонка", "Результат"

#33:  Author: MVVLocation: Ростов-Дон PostPosted: Tue May 25, 2010 16:48
    —
Lev wrote:
Автору плагина составляет труд даже понять, чего от него хотят Sad
конфиг-параметр-отображаемое поле - я уже заблудился.
Может в обсуждение Script Content plugin'а перебраться?

ОК, переберемся и уточним.
При инициализации плагина читаешь конфиг и строишь список полей из специальной секции, а дальше - выдаешь эти поля Тоталу, когда тот вызывает ContentGetSupportedField, и потом при вызове ContentGetValue вызываешь тот или иной скрипт, в зависимости от индекса - каждое поле будет иметь свой индекс, который ТК будет сообщать, так что тут не запутаешься. Работы - чуть-чуть, просто хранить не одну строку на запуск скрипта, а два массива - названий полей и строк запуска скрипта, и обращаться к ним по мере необходимости.
В результате юзер при настройке набора колонок будет видеть не одно поле, которое плагин может вернуть, а несколько полей, которые он предварительно настроил, и будет достаточно одной копии плагина для запуска любого числа скриптов.

Посмотрел формат файла script.ini, если я так понял, в секции [Script] указано, какой из блоков файла используется в данный момент. Вполне можно в этой секции обрабатывать строки вида "имя поля"="имя блока скрипта", при этом все имеющиеся параметры секции можно получить, вызвав функцию перечисления параметров INI-файла.


Last edited by MVV on Tue May 25, 2010 16:56; edited 1 time in total

#34:  Author: Lev PostPosted: Tue May 25, 2010 16:50
    —
Quote:
произвольно именовать колонки результатов.
В редакторе колонок можно дать любое желаемое имя колонкам.
Насколько я разобрался - список выводимых результатов плагина грузится при прописывании плагина в тотале, имена при первом вызове, при смене количества колонок и их имён надо будет перепрописывать плагин в тотале.
Теоретически можно динамически перепрописывать имёна колонок в wincmd.ini при каждом вызове плагина, но займусь ли я этим не знаю.
Переписывать имя колонок и количество при выдаче результата каждого файла для директории из тысячи файлов имхо не очень оптимально. Не знаю сохранятсяуже выданные результаты, при изменении количества колонок.
---
Ставил ли кто-нибудь опыты с созданием ссылки на плагин вместо заведения его дубля?


Last edited by Lev on Tue May 25, 2010 16:57; edited 1 time in total

#35:  Author: Lev PostPosted: Tue May 25, 2010 16:55
    —
Quote:
При инициализации плагина читаешь конфиг...

Т.е. в ини файле будет прописано:
[Columns]
колонка1 = script1.vbs;content
колонка2 = script1.vbs;content1
Заголовок = script2.vbs;content
MyContent=script3.js;content
?
или ещё как-то?

#36:  Author: MVVLocation: Ростов-Дон PostPosted: Tue May 25, 2010 16:59
    —
Lev wrote:
Quote:
При инициализации плагина читаешь конфиг...

Т.е. в ини файле будет прописано:
[Columns]
колонка1 = script1.vbs;content
колонка2 = script1.vbs;content1
Заголовок = script2.vbs;content
MyContent=script3.js;content
?
или ещё как-то?

Я там дополнил пост. Да, смысл такой. Совсем несложно делать переменное число полей плагина, просто один раз их Тоталу выдавать. А обновить список полей можно, вызвав cm_UnloadPlugins - при этом ТК загрузит плагин заново, тем самым запросив список полей еще раз.
В общем, если юзер имеет несколько скриптов, чтобы он мог видеть несколько контентных полей в плагине - например, поля AddZeroes, ExeUp, Ext, Html и т.п. (можно настроить их в дефолтном конфиге).
А как именно устроить конфиг - тут уж тебе как автору виднее. Smile

Lev wrote:
Ставил ли кто-нибудь опыты с созданием ссылки на плагин вместо заведения его дубля?

Да. Правда, не с твоим плагином, но результат будет таким же - винда не загрузит новую копию уже загруженной в память библиотеки, просекает, что жесткая ссылка. Подробности.

#37:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 25, 2010 17:40
    —
Lev wrote:
Цитата:
произвольно именовать колонки результатов.
В редакторе колонок можно дать любое желаемое имя колонкам.

Сорри, за введение в заблуждение. Я имел ввиду произольные наименования полей плагина. Именно о чём дальше идёт обсуждение.

А чем не устраивает преложенный мной ранее вариант?
Batya wrote:
[Script]
Section=Defaults|Extension|AddZeros|exe-arc up|js

Batya wrote:
content.Add "Новая колонка", "Результат"

Т.е. начитываем поля из инишника из значения "Section".
Запускаем единственный скрипт. Результат работы скрипта - это массив content с ключами по именам описанных ранее в инишнике полей:
Code:
content.Add "Defaults", "Результат 1"
content.Add "Extension", "Результат 2"
content.Add "AddZeros", "Результат 3"
content.Add "exe-arc up", "Результат 4"
content.Add "js", "Результат 5"

#38:  Author: Lev PostPosted: Tue May 25, 2010 19:08
    —
Quote:
будет достаточно одной копии плагина для запуска любого числа скриптов
Можно ведь запускать скрипты скриптом, т.е. можно не переделывать плагин, а написать скрипт вызывающий скрипты по заданному условию - имени текущей папки, ключу в некотором файле и т.п.
О наименованиях полей выдаваемых плагином подумаю. Я так понял, что имеются в виду всё-таки не произвольные и не динамически генерируемые, а заранее вписанные в ini, свои для каждого скрипта в его секции.

#39:  Author: MVVLocation: Ростов-Дон PostPosted: Tue May 25, 2010 19:23
    —
Да, поля задаются только конфигурационным файлом. Поле - одно на каждый скрипт. А по условию - это какая-то морока получится. Вдруг кто-то захочет видеть сразу несколько колонок в одном месте. Удобнее все-таки иметь возможность делать несколько полей.

#40:  Author: Lev PostPosted: Tue May 25, 2010 19:26
    —
В данный момент плагин поддерживает 10 колонок, или я чего-то недопонял.

#41:  Author: MVVLocation: Ростов-Дон PostPosted: Tue May 25, 2010 21:16
    —
Ну, было бы удобнее с любым числом колонок, особенно если это ограничение не связано с какими-либо сложностями. Кому-то хватит 3, кому-то надо 20, а все видят ровно 10, и названия у них малоговорящие (править файл локализации - не дело).

#42:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 25, 2010 23:40
    —
MVV wrote:
Поле - одно на каждый скрипт.

Меня, конечно, игнорируют, но я выскажусь, что мне не нравится концепция - для каждого поля по скрипту.
Во-первых, это заставит плодить скрипты.
Во-вторых, результат некоторых полей может быть весьма похожим, и нет смысла размножать одинаковую логику.
Ну и наконец, результаты некоторых полей могут зависеть друг от друга. Тогда опять приходим к умножению одинаковых сущностей.

Подумайте, как, например, при новой логике может быть реализован вот этот вариант.

#43:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Sep 13, 2010 17:49
    —
Новый скриптик:
Code:
'=================================================
' Колонка Result возвращает владельца файла\папки
'=================================================

content = Result

Function Result
  On Error Resume Next
  Dim wmiSecSettings 'WMI объект для параметров безопасности
  Dim wmiSecurityDescriptor 'Дескриптор защиты файла

  Dim FOResult 'Результат выполнения операции чтения дескриптора безопасности
  Dim wmiOwner 'Объект владельца файла

  Set wmiSecSettings = GetObject ("winmgmts:Win32_LogicalFileSecuritySetting.path='" & filename & "'") 'Создание WMI объекта файла

  FOResult = wmiSecSettings.GetSecurityDescriptor(wmiSecurityDescriptor) 'Считывание дескриптора безопасности
  Set wmiOwner = wmiSecurityDescriptor.Owner 'Создание объекта владельца файла

  If Err.Number <> 0 Then 'Ошибка при определении владельца файла
    Result = "Can't get file owner. Error: " & Err.Description
  Else 'Владелец файла определен - вывод результата
    Result = wmiOwner.Domain & "\" & wmiOwner.Name
  End If
End Function

#44: Путь к ini-файлу Author: vsz PostPosted: Thu Nov 18, 2010 19:18
    —
Здравствуйте!
Обнаружил проблему с использованием плагина в Portable установке. Подозреваю, что плагин не может найти свой ini-файл.

Как вариант можно всегда брать ini-файл в той же папке, где находится и сам файл плагина:

Code:

uses Windows;

function GetModuleFileNameStr: String;
 var
   buffer : array [0..MAX_PATH] of Char;
 begin
   GetModuleFileName( Hinstance, buffer, MAX_PATH);
   Result := buffer;
 end;

iniPath := ExtractFilePath(GetModuleFileNameStr);

#45:  Author: Lev PostPosted: Thu Nov 18, 2010 20:44
    —
Quote:
можно всегда брать ini-файл в той же папке, где находится и сам файл плагина

Плагин всегда берёт ini-файл в той же папке, где находится и сам файл плагина.
Никакого другого поведения я не закладывал.
Quote:
Подозреваю, что плагин не может найти свой ini-файл.

Когда плагин не может найти свой ini-файл он пишет - No script or ini file, снимая этим все подозрения.

#46:  Author: dis8848 PostPosted: Wed Apr 06, 2011 14:14
    —
Господа, может кто-то подскажет как реализовать следующую задачу.

Есть несколько файлов одного типа (например xls). В каждом из них есть ячейка "Абонентский номер" и ячейка с указанием значения, например, 0000000001 или 0000000002.

Требуется переименовать файлы следующим образом:
- если находит в содержимом значение 0000000001 - Пупкин Вася
- если находит в содержимом значение 0000000002 - Пупкина Маня и т.д.

Возможно задача нетривиальная, но пока не знаю как подступиться к ней, и возможно ли вообще?

Файлов много и их имена представляют собой бессмысленный набор символов.

#47:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Apr 26, 2011 15:19
    —
dis8848
Я не понял.
Если значение берём из второй ячейки, то зачем ячейка "Абонентский номер"?
И откуда брать имена (Пупкин Вася, Пупкина Маня и т.п.)?

#48:  Author: dis8848 PostPosted: Mon May 02, 2011 11:26
    —
Возможно я корявенько написал, поясню по-иному.
Забудем о ячейках. Есть много файлов (отчеты оператора связи), каждый из которых в тексте содержит уникальный (и только один) номер SIM-карты. Сами файлы могут быть xls xml или html.
Файлы приходят с именами в виде бессмысленного набора символов. Соответствие номера SIM - ФИО заранее известно (пусть это будет таблица).
Нужно, чтобы искался текст в файле (тот самый номер SIM из заранее известного массива) и при нахождении соответствия - имя файла переименовывалось бы с абракадабры в значение, заданное в таблице.
Вот как-то так.

#49:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 03, 2011 10:03
    —
dis8848
Ясно.
Только файлы "xls xml или html" имеют разный формат.
1. В xls-файле номер SIM-карты хранится в какой-то определённой ячейке с заранее известным номером?
2. В xml-файле известен обрамляющий тэг для номера SIM-карты?
3. Как в html-файле определить положение номера SIM-карты?

#50:  Author: dis8848 PostPosted: Tue May 03, 2011 10:10
    —
В html номер SIM всегда находится в 61 строке
Code:
<br />Номер SIM-карты: 00000000000000000000</td>

то есть сам номер всегда занимает 20 символов на 61 строке начиная с 24 знака.
По остальным - сейчас перед глазами нету образцов, но да - по xls там всегда тоже строго определенная ячейка.
--------------------------------------------------------
сейчас уточнил, в случае с xls это всегда ячейка с именем R5C3.

#51:  Author: BatyaLocation: Москва, Россия PostPosted: Wed May 04, 2011 15:21
    —
dis8848
Т.к. для xml ты не ответил, пока так:
Code:
'====================================================
' Колонка Result возвращает "Номер SIM-карты"
'====================================================

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading  = 1
Const ReadingLine = 61

On Error Resume Next
Select Case LCase(FSO.GetExtensionName(filename))
  Case "html"
    content = FromHtml(filename)
  Case "xml"
    content = FromXml (filename)
  Case "xls"
    content = FromXls (filename)
  Case Else
    content = ""
End Select
If Err.Number <> 0 Then content = ""
On Error GoTo 0

Set FSO = Nothing

Function FromHtml(pFile)
  Dim i
  FromHtml = ""
  With FSO.OpenTextFile(pFile, ForReading)
    i = 1
    Do While Not .AtEndOfStream
      If i < ReadingLine Then
        .SkipLine
        i = i + 1
      Else
        FromHtml = Mid(.ReadLine, 24, 20)
        Exit Do
      End If
    Loop
    .Close
  End With
End Function

Function FromXml(pFile)
  FromXml = ""
  'Задача пока не формализована
'  With FSO.OpenTextFile(pFile, ForReading)
'    Do While Not .AtEndOfStream
'      .SkipLine
'    Loop
'    .Close
'  End With
End Function

Function FromXls(pFile)
  FromXls = ""
  With CreateObject("Excel.Application")
    .Workbooks.Open pFile, null, True
    On Error Resume Next
    FromXls = .Cells(5,3).Value
    On Error GoTo 0
    .Quit
  End With
End Function

Поскольку ты сам запостил вопрос в этой теме, я надеюсь, что ты знаешь, что с этим делать Wink

#52:  Author: dis8848 PostPosted: Thu May 05, 2011 11:29
    —
Batya wrote:
...я надеюсь, что ты знаешь, что с этим делать Wink
спасибо большое! буду пробовать.

Добавлено спустя 2 часа 17 минут 4 секунды:

Попробовал с html, всё хорошо, немного только поправил значения:
Code:
FromHtml = Mid(.ReadLine, 34, 20)

Еще раз большое спасибо!

#53:  Author: BatyaLocation: Москва, Россия PostPosted: Thu May 05, 2011 14:47
    —
dis8848 wrote:
немного только поправил значения

Ну, как ты писал выше, так я и сделал Smile

Так что xml-то?

#54:  Author: dis8848 PostPosted: Wed May 18, 2011 07:50
    —
Batya wrote:
dis8848 wrote:
немного только поправил значения

Ну, как ты писал выше, так я и сделал Smile

Так что xml-то?
решили остановиться на html

правда основная задача осталась не решена - подстановка вместо номеров SIM имён пользователей.

#55:  Author: BatyaLocation: Москва, Россия PostPosted: Wed May 18, 2011 10:44
    —
dis8848 wrote:
правда основная задача осталась не решена - подстановка вместо номеров SIM имён пользователей.

Ну, так ты ж не сказал точно, откуда брать ФИО? (Расположение файла, формат, номер начальной строки, позиция, номера ячеек, столбцов, строк и т.п.)

#56:  Author: Andrey_ALocation: Сочи PostPosted: Sun Jul 24, 2011 20:10
    —
Подскажите почему не срабатывает код и выдаёт ошибку: "требуется объект"
Code:
Dim FSO, objFolder, objShellApp, objItem
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = CreateObject("Shell.Application").NameSpace(FSO.GetParentFolderName(FileName))
Set objItem = objFolder.ParseName(FSO.GetFileName(FileName))
Content = objFolder.GetDetailsOf(objItem, 25)

хотя если вставить начало FileName = "c:\TC Image\TOTALCMD.EXE"
то работает... может что-то не хватает

#57:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Jul 25, 2011 09:40
    —
Andrey_A
В script.ini должно быть:
Code:
LongName=1

#58:  Author: Andrey_ALocation: Сочи PostPosted: Mon Jul 25, 2011 09:55
    —
Спасибо, заработало!

#59:  Author: dis8848 PostPosted: Wed Sep 21, 2011 14:29
    —
Batya wrote:
Ну, так ты ж не сказал точно, откуда брать ФИО? (Расположение файла, формат, номер начальной строки, позиция, номера ячеек, столбцов, строк и т.п.)
Ф.И.О. должно браться из таблички, наподобие вот такой: http://www.mediafire.com/?hy0de9i5fjt505p
расположение файла можно пока условно принять за D:\work\
Если это хоть как-то облегчит задачу:

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

#60:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Oct 04, 2011 11:06
    —
dis8848
Я опять ничего не понял.
Если ты хочешь остановиться "на html, другие не будем пока рассматривать", то зачем привёл пример xls-файла?
Ты хочешь переименовывать файлы по их содержимому, или информация для переименования должна браться из какого-то стороннего файла?

#61:  Author: dis8848 PostPosted: Tue Oct 04, 2011 11:34
    —
Batya wrote:
dis8848
Я опять ничего не понял.
Если ты хочешь остановиться "на html, другие не будем пока рассматривать", то зачем привёл пример xls-файла?
Ты хочешь переименовывать файлы по их содержимому, или информация для переименования должна браться из какого-то стороннего файла?
файлы, которые необходимо переименовать - это html файлы, в них же содержится и номер SIM, а вот сопоставление этого самого номера SIM с конкретной фамилией - в стороннем файле xls.
Прошу простить, что неясно выразился Smile

Иными словами алгоритм такой:
- анализируется html файл: в нём ищется номер SIM (в тексте html этот номер находится после слов "Номер SIM-карты: ", например так: <br />Номер SIM-карты: 00000000000000000000</td>).
- этот номер сопоставляется с фамилией, при этом само соответствие указано в xls файле (как в файле-примере)
- производится переименование файла html из абракадабры в ФИО (новое имя файла - суть ФИО из таблицы xls)

Ранее я предполагал, что слова "Номер SIM-карты: находятся всегда на строго определенной позиции в тексте html, но практика показала, что позиция может меняться каждый раз.

Как вариант, вместо взятия номера после слов "Номер SIM-карты: " можно искать в тексте html номер SIM в xls методом перебора, и, поскольку номер SIM уникален и содержится в тексте всего 1 раз, то противоречий быть не должно.

примерно так что ли...

спасибо за помощь еще раз.

#62:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Oct 04, 2011 17:53
    —
dis8848
Code:
'====================================================
' Колонка Result  возвращает "Номер Sim-карты"
' Колонка Result1 возвращает имя владельца Sim-карты
'====================================================

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading  = 1

On Error Resume Next
Select Case LCase(FSO.GetExtensionName(filename))
  Case "html"
    content = FromHtml(filename)
  Case "xml"
    content = FromXml (filename)
  Case "xls"
    content = FromXls (filename)
  Case Else
    content = ""
End Select
If Err.Number <> 0 Then content = ""
If content <> "" Then content1 = GetName(content)
If Err.Number <> 0 Then content1 = ""
On Error GoTo 0

Set FSO = Nothing

Function FromHtml(pFile)
  Dim P, P1, Text
  Const Str = "Номер SIM-карты:"
  FromHtml = ""
  With FSO.OpenTextFile(pFile, ForReading)
    Text = .ReadAll
    .Close
  End With
  P = InStr(1, Text, Str, 1)
    FromHtml = P
  If P > 0 Then
    P1 = InStr(P + Len(Str), Text, "<")
    If P1 > 0 Then FromHtml = Trim(Mid(Text, P + Len(Str), P1 - P - Len(Str)))
  End If
End Function

Function FromXml(pFile)
  FromXml = ""
  'Задача пока не формализована
'  With FSO.OpenTextFile(pFile, ForReading)
'    Do While Not .AtEndOfStream
'      .SkipLine
'    Loop
'    .Close
'  End With
End Function

Function FromXls(pFile)
  FromXls = ""
  With CreateObject("Excel.Application")
    .Workbooks.Open pFile, null, True
    On Error Resume Next
    FromXls = .Cells(5,3).Value
    On Error GoTo 0
    .Quit
  End With
End Function

Function GetName(pSim)
  Const NamesFile = "D:\work\номера_сим-карт.xls"
  Const ColSim    = 3 'Номер столбца с номерами
  Const ColName   = 2 'Номер столбца с именами
  Const Row       = 2 'Номер начальной строки
  GetName = ""
  Dim i, Sim
  i = Row
  With CreateObject("Excel.Application")
    .Workbooks.Open NamesFile, null, True
    On Error Resume Next
    Do
      Sim = .Cells(i,ColSim).Value
      If Sim = pSim Then
        GetName = .Cells(i,ColName).Value
        Exit Do
      End If
      i = i + 1
      If Err.Number <> 0 Then Exit Do
    Loop Until Sim = ""
    On Error GoTo 0
    .Quit
  End With
End Function

Исправь, при необходимости, параметры xls-файла в функции GetName (в конце скрипта).
Используй инструмент группового переименования (ИГП) по колонке Result1.

#63:  Author: dis8848 PostPosted: Tue Oct 04, 2011 18:00
    —
спасибо! - буду пробовать.

#64:  Author: dis8848 PostPosted: Tue Oct 04, 2011 23:53
    —
Попробовал - всё получилось!
Result1 сразу выдаёт правильное ФИО.

В скрипте ничего не менял кроме имени и пути файла xls, и отметил следующую особенность: скрипт не работает, если в пути к файлу xls есть кириллица. Пришлось переименовать на латиницу.

Очень Вам благодарен.

#65:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Oct 05, 2011 08:57
    —
dis8848 wrote:
и отметил следующую особенность: скрипт не работает, если в пути к файлу xls есть кириллица.

Странно. Может у тебя MS Office криво установлен? У меня всё работает нормально.
Ну и, конечно же, файл vbs-скрипта должен иметь кодировку Windows-1251 (ANSI).

#66:  Author: aLLigatorLocation: из тех ворот, что и весь народ... PostPosted: Thu Dec 01, 2011 14:51
    —
Можно как-нибудь в одну колонку выводить результат работы нескольких скриптов?

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

Anger wrote:
Немного доработал скрипт ув.ricobautsch:

Немного подредактировал под свои нужды:
Code:

const nCharStart = 24
const nCharCnt = 5

Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextStream = fso.OpenTextFile(filename)

oTextStream.Skip(nCharStart)
If not oTextStream.AtEndOfStream Then
  content_str = oTextStream.Read(nCharCnt)

  content=Replace(content_str,Chr(0),Chr(1))

End If
oTextStream.Close


Подскажите как можно задать несколько промежутков?

#67:  Author: Lev PostPosted: Thu Dec 01, 2011 16:40
    —
Quote:
Можно как-нибудь в одну колонку выводить результат работы нескольких скриптов?

1) Написать скрипт интегрирующий в себе работу нескольких скриптов
или
2) Подключить копии плагина по кол-ву желаемых скриптов. Объединять в одну колонку стандартным способом TC или другими комбинирующими плагинами.

#68:  Author: aLLigatorLocation: из тех ворот, что и весь народ... PostPosted: Sat Dec 03, 2011 12:03
    —
Помогите, пожалуйста, отредактировать предыдущий скрипт, чтобы выводились последние два байта каждого файла!

#69:  Author: dis8848 PostPosted: Sun Dec 04, 2011 11:57
    —
Batya wrote:
Странно. Может у тебя MS Office криво установлен? У меня всё работает нормально.
Ну и, конечно же, файл vbs-скрипта должен иметь кодировку Windows-1251 (ANSI).
дело было в кодировках...

попытался с 8 Total-ом использовать - выдало ошибку

#70:  Author: aLLigatorLocation: из тех ворот, что и весь народ... PostPosted: Wed Dec 07, 2011 20:03
    —
Помогите, пожалуйста, адаптировать данный скрипт для подключения к плагину и вывода информации не только для "C:\WINDOWS\notepad.exe", а всех файлов.
Code:
Option Explicit

Dim strFileName
Dim intByteCount

Dim objFSO
Dim objSpeechFileStream

Dim lngLength
Dim arrBuff


strFileName  = "C:\WINDOWS\notepad.exe"
intByteCount = 2

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objSpeechFileStream = WScript.CreateObject("SAPI.SpFileStream")

If objFSO.FileExists(strFileName) Then
   lngLength = objFSO.GetFile(strFileName).Size
   
   With objSpeechFileStream
      .Open strFileName
      
      On Error Resume Next
      
      .Seek lngLength - intByteCount
      
      If Err.Number = 0 Then
         On Error Goto 0
         
         If .Read(arrBuff, intByteCount) = intByteCount Then
            WScript.Echo ConvertByteArray2HexString(arrBuff)
         End If
      Else
         On Error Goto 0
      End If
      
      .Close
   End With
Else
   ' Nothing to output
End If

WScript.Quit 0

'=============================================================================
Function ConvertByteArray2HexString(arrByteArray)
   Dim i
   Dim strValue
   
   strValue = ""
   
   For i = 1 To LenB(arrByteArray)
      strValue = strValue & Right("00" & Hex(AscB(MidB(arrByteArray, i, 1))), 2)
   Next
   
   ConvertByteArray2HexString = strValue
End Function
'=============================================================================
[/code]

#71:  Author: FlasherLocation: Москва PostPosted: Wed Dec 07, 2011 21:10
    —
Тынс:
Code:
With CreateObject("SAPI.SpFileStream")
  .Open FileName
  .Seek CreateObject("Scripting.FileSystemObject").GetFile(FileName).Size - 2
  If .Read(F, 2) = 2 Then
    For i = 1 To LenB(F)
      Content = Content & Right("00" & Hex(AscB(MidB(F, i, 1))), 2)
    Next
  End If
  .Close
End With

#72:  Author: aLLigatorLocation: из тех ворот, что и весь народ... PostPosted: Thu Dec 08, 2011 11:04
    —
Аригато газеймашта, что означает - Премного благодарен!

#73:  Author: Lev PostPosted: Fri May 04, 2012 17:05
    —
Вы конвертируете весь файл в строку типа "FF D8 FF ...", что занимает длительное время
и уже в ней ищете вхождения ваших маркеров
в вашем коде InStr(S, "FF") - всегда будет равно единице (других jpg я в жизни не встречал), а InStr(S, "FFС4"), если оно будет найдено будет больше единицы, и DHT всегда будет отрицательным, а content="O" (будем считать, что перепутан порядок вычитания)
в общем на вашем месте я бы просто искал по файлу первое вхождение FFC4, после чего выходил бы из цикла.
Что-нибудь типа
Code:
...
For i = 1 To LenB(BinaryFile)
   If AscB(MidB(BinaryFile, i, 1)) = 255 Then If AscB(MidB(BinaryFile, i+1, 1)) = 196 Then Exit For
DHT=i '(или DHT=i-2) лень думать
...

возможно и искать можно проще, а я просто подзабыл нужный оператор.

#74:  Author: sancherLocation: Piter PostPosted: Fri Jun 22, 2012 10:41
    —
Помогите люди добрые.
Переношу настройки с TC 7.55 на 8.0
Перестал работать скрипт из этой темы, созданной мной
http://forum.wincmd.ru/viewtopic.php?p=85756&sid=274e807bbf53d4a8b3b3433ab603ebb2
Перенёс всю папку script без каких либо изменений.
Колонку настроил точно так же
Не выводится ничего, в колонке пусто Sad
кратко опишу, что было сделано из предыдущей темы
установил плагин, создал BaseNameRev.vbs:
Code:
BN = LCase(CreateObject("Scripting.FileSystemObject").GetBaseName(FileName))
i = InStrRev(BN, "_")
y = Mid(BN, i + 1)
If i > 0 And IsNumeric(y) Then content = y

поправил Script.ini:
Code:
[Script]

Section=BaseNameRev

[BaseNameRev]
Script=BaseNameRev.vbs

настроил набор колонок ([=script.Result])

перестал выводится результат, колонка [=script.Result] пуста

#75: ApkInfo Author: Dreamer... PostPosted: Thu Jul 19, 2012 18:22
    —
Наваял скрипт для отображения информации о Андроид .арк файлах.
Это мой первый скрипт на vbs - так что возможна куча ошибок и громоздкий код ))))
Для работы со скриптом необходим файл aapt.exe в папке с плагином.
Один небольшой минус - рядом с файлами арк создается текстовый файл для быстрого отображения. Хотел его хранить в папке со скриптом, но не вышло....

Тк я новичек - не могу запостить превьюшку...

Code:
'Script for Script Content Plugin
'(c)Lev Freidin, 2005-2008

'Show Android APK file info
'Script Autor - Dreamer...

'It's my first vbs :)

Dim fso, sExt, ts, s, re, f, oExec, WshShell, tmp, tt, fnd
Set fso = CreateObject("Scripting.FileSystemObject")
sExt = lcase(fso.GetExtensionName(filename))
Const ForReading = 1

Set re = New RegExp
re.Global = True
re.IgnoreCase = True
re.MultiLine = True

'-------TEST ZONE---------
'f = "d:\Android\Games\Стрелять\com.gamelab3d.vampireadventuresbl_1_1.0.0.apk"
'-----TEST ZONE END-------

Select Case sExt
case "apk"


Set f = fso.GetFile(filename)
Fn = fso.GetFileName(Chr(34) & f & Chr(34))

'-------Check if db file not exist----------------
If (fso.FileExists("ApkList.txt")) Then
     
   Else
Set Nfile = FSO.CreateTextFile("ApkList.txt")
Nfile.Close
End If

list = "ApkList.txt"
Set ts = fso.OpenTextFile(list, ForReading)
Do Until ts.AtEndOfStream
s = ts.readLine
Loop
'-----------Check Filename in db-----------------
Fnd = inStr(s, Fn)
If Fnd = 0 Then
'----------------If not in db---------------------
ts.Close
strPath = "C:\Temp"
strFileName = fso.GetTempName
strFullName = fso.BuildPath(strPath, strFileName)

Set WshShell = CreateObject("WScript.Shell")
oExec = WshShell.Run("cmd /C aapt d badging " & Chr(34) & f & Chr(34) & " >" & strFullName, 0, True)

Set tmp = fso.OpenTextFile(strFullName, ForReading)
Do Until tmp.AtEndOfStream
fStr = tmp.readAll
Loop

'-------PETRARKAAAAAAAAA------------

'--------Application Name---------------
re.Pattern = "application: label='(.*)' "
if re.Test(fStr) then
Set tt = re.Execute(fStr)
ApkName = re.replace (tt(0),"$1")
End If
'--------Application Version---------------
re.Pattern = "versionName='(.*)'"
if re.Test(fStr) then
Set tt = re.Execute(fStr)
Vers = re.replace (tt(0),"$1")
End If
'--------Android version---------------
re.Pattern = "sdkVersion:'(.*)'"
if re.Test(fStr) then
Set tt = re.Execute(fStr)
Pack = re.replace (tt(0),"$1")
If Pack = "16" Then
Andr = "Android 4.1.x"
End If
If Pack = "15" Then
Andr = "Android 4.0.3"
End If
If Pack = "14" Then
Andr = "Android 4.0"
End If
If Pack = "13" Then
Andr = "Android 3.2"
End If
If Pack = "12" Then
Andr = "Android 3.1.x"
End If
If Pack = "11" Then
Andr = "Android 3.0.x"
End If
If Pack = "10" Then
Andr = "Android 2.3.3"
End If
If Pack = "9" Then
Andr = "Android 2.3.0-2"
End If
If Pack = "8" Then
Andr = "Android 2.2.x"
End If
If Pack = "7" Then
Andr = "Android 2.1.x"
End If
If Pack = "6" Then
Andr = "Android 2.0.1"
End If
If Pack = "5" Then
Andr = "Android 2.0"
End If
If Pack = "4" Then
Andr = "Android 1.6"
End If
If Pack = "3" Then
Andr = "Android 1.5"
End If
If Pack = "2" Then
Andr = "Android 1.1"
End If
If Pack = "1" Then
Andr = "Android 1.0"
End If
If Pack = "10000" Then
Andr = "Current Dev. Build"
End If
Else
Andr = "Unknown"
End If
'--------ARM v7---------------
re.Pattern = " 'armeabi-(.*)'"
if re.Test(fStr) then
Set tt = re.Execute(fStr)
VArm = re.replace (tt(0),"$1")
Arm7 = " arm" & VArm
End if
'--------ARM v6---------------
re.Pattern = " 'armeabi'(.*)"
if re.Test(fStr) then
Set tt = re.Execute(fStr)
VArm = re.replace (tt(0),"$1")
Arm6 = " armv6"
End If
'-----------STOP PETRAAARKAAA---------------------
'--------------Write to ApkList db-----------------------
Const ForAppending = 8
Set ts2 = fso.OpenTextFile(list, ForAppending, true)
Line = Fn & " ------- " & "<name>" & ApkName & " v." & Vers & "</name> ------- <misc>" & Andr & " " & Arm6 & " " & Arm7 & "</misc>"
'Wscript.Echo Line
LineWright = ts2.WriteLine(Line)
tmp.Close
fso.DeleteFile(strFullName)
ts2.Close
End If

'-------------Read from db function----------------------

Set ts = fso.OpenTextFile(list, ForReading)
Do Until ts.AtEndOfStream
s = ts.readLine
Loop
re.Pattern = "<name>(.*)</name>"
if re.Test(s) then
Set tt = re.Execute(s)
ApkNV = re.replace (tt(0),"$1")
End If
re.Pattern = "<misc>(.*)</misc>"
if re.Test(s) then
Set tt = re.Execute(s)
Andr = re.replace (tt(0),"$1")
End If
content= ApkNV
content1= Andr
'-------TEST ZONE---------
'Wscript.Echo ApkNV & Andr
'-----TEST ZONE END-------
ts.Close

End Select

#76:  Author: KAC PostPosted: Wed Jul 03, 2013 13:13
    —
Уважаемые программисты, помогите натстроить/написать скрипт для конкретной цели, пожалуйста.
задача такая: отображать информацию о снятом спектре (научные спектры ЯМР) в списке папок напротив каждой папки.
один спектр хранится в одной папке например /101/ таких папок очень много и каждое имя папки не несет никакой инфрмации, а вся информация о спектре содержится в текстовых файлах внутри каждой папки например:
Название спектра хранится в в первой строчке файла title, файл лежит всегда /101/pdata/1/title
Температура, при которой снят спектр находится в файле /101/acqus в виде ##$TE= 298.0488, номер строки не всегда постоянен, главное то что температура всегда стоит после символов ##$TE=
импульсная последовательность, с помощью которой снят спектр находится в том же файле /101/aqcus, но после символов ##$PULPROG= например ##$PULPROG= <zgesgp>
и так далее, число накоплений, например, в файле /101/aqcus ##$NS= 128

Очень хочется чтобы плагин, все время "заглядывал" во внутренности каждой папки искал нажные параметры и выводил в виде разных колонок сразу рядом с названием папки.
Насколько я понял, это в принципе возможно, но я не понимаю, как написать скрипт, который будет делать такую штуку.
Очень прошу, тех, кому это не составит труда, помочь на благо Российской науке.
Спасибо.

#77:  Author: Serge Yolkin PostPosted: Tue Oct 15, 2013 12:56
    —
А нет ли где-нибудь примера js скрипта для этого плагина, а то в архиве пример не слишком информативный?

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

Упс... Нашел Здесь

#78:  Author: Serge Yolkin PostPosted: Wed Oct 16, 2013 00:36
    —
Гы... Найденный пример не работал по дурацкой причине: если в vbs переменная content обрабатывается, то в js надо писать имя переменной с большой буквы. Вероятно, и с ContentsN то же - ещё не проверял.

Lev, а плагин ещё поддерживается?

#79:  Author: FlasherLocation: Москва PostPosted: Wed Oct 16, 2013 00:49
    —
Serge Yolkin
Давно нет. Он вообще очень короткое время поддерживался.

#80:  Author: Serge Yolkin PostPosted: Wed Oct 16, 2013 01:15
    —
Жаль... А то там в js пути без слэшей передаются (видимо не задвоены), а если что-то с u начинается, то плагин это считает \u и ждет дальше кода символа. С b тоже прикольно. А мне CaptainFlint советовал с помощью этого плагина исполняшки парсить...

#81:  Author: FlasherLocation: Москва PostPosted: Wed Oct 16, 2013 01:21
    —
Тогда VBS. Very Happy

#82:  Author: Serge Yolkin PostPosted: Wed Oct 16, 2013 01:45
    —
Да не знаю я Васика...

#83:  Author: FlasherLocation: Москва PostPosted: Wed Oct 16, 2013 01:55
    —
Смайлик тому свидетель. Rolling Eyes

А что на оффсайте пишут? Я в подробности по поводу js не вдавался.

#84:  Author: CaptainFlintLocation: Москва PostPosted: Wed Oct 16, 2013 02:34
    —
 Чуток оффтопа

#85:  Author: Serge Yolkin PostPosted: Wed Oct 16, 2013 07:41
    —
CaptainFlint
Я в курсе. Плагин передаёт в скрипт переменную filename, как строку с незадвоенными слэшами, поэтому скрипт (js)
Code:
Content=filename;
выводит полное имя без слэшей, а если какой-то элемент пути начинается с u, b и т.д. - считает это эскейп последовательностью (правильной, или неправильной: например, для u в колонку выводится "Предполагается шестнадцатеричное число"). Задвоить слэши из скрипта уже не получится:
Code:
Content=/\\/.test(filename);
выдаёт те же ошибки с u, а для всех остальных файлов - всегда false.

Или "желание в нём разобраться" относилось к VBS?

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

Flasher wrote:
А что на оффсайте пишут?

А там единственный пример на js - и тот нерабочий.

#86:  Author: CaptainFlintLocation: Москва PostPosted: Wed Oct 16, 2013 20:15
    —
Serge Yolkin
Тогда я неправильно понял суть проблемы. Я думал, в JS-скрипт была скопирована строчка из VBS-скрипта с одинарными слэшами. А если текст лежит в переменной, то там не должно быть таких проблем. Esc-последовательности срабатывают только при считывании и разборе JS-скрипта движком. Т. е. когда он в исходном коде компилируемого скрипта встречает, например, строчку с последовательностью "\n", то трактует это особым образом (подставляет в итоговую строку не эти два символа, а конец строки). Но если у него уже есть переменная, содержащая готовую строку с этими двумя символами (обратный слэш и буква "n") — например, он прочитал эту строку из файла — то, разумеется, он ни в коем случае не будет её трактовать как конец строки. (Разве что подставишь её в eval, когда содержимое строки компилируется и выполняется как новый скрипт.)

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

#87:  Author: Serge Yolkin PostPosted: Wed Oct 16, 2013 21:57
    —
CaptainFlint
Боюсь накосячить с терминологией, но, насколько я понял, плагин использует для связи со скриптом две (больше, но остальные пока не в счёт) глобальные переменные: Content и filename (в скрипте они должны определяться без var, т.е. как глобальные). В первой - результат работы скрипта передаётся в плагин, во второй - имя файла передаётся плагином в скрипт. Вот во второй переменной и затык. Полное имя туда пишется как есть, а скрипт это прочитать не может.

#88:  Author: CaptainFlintLocation: Москва PostPosted: Wed Oct 16, 2013 23:22
    —
Serge Yolkin
Поставил себе этот плагин, потестил. Похоже, проблема в самом плагине. Я не знаю, как он передаёт имя файла в скрипт (к сожалению, исходников нет), но такое поведение заставляет предположить, что движку просто скармливается строка вида
Code:
'var filename = "' + filename + '";'

Естественно, при такой обработке проклюнутся все эти наблюдаемые эффекты с заменой \n на конец строки, \t на табуляцию и т. д. Если так, то это однозначный баг плагина, который обойти, наверное, никак не получится. Sad

Товарищ Lev, можно ли услышать какие-нибудь комментарии на этот счёт?

#89:  Author: Serge Yolkin PostPosted: Wed Oct 16, 2013 23:40
    —
Уф-ф... Есть подтверждение. А то я свою Win 8.1 Preview подозревать начал. С IE11 вместе.

#90:  Author: FlasherLocation: Москва PostPosted: Wed Oct 16, 2013 23:46
    —
Serge Yolkin
Передавай content через ScriptControl.

#91:  Author: Serge Yolkin PostPosted: Wed Oct 16, 2013 23:57
    —
Flasher
??? Content и так неплохо передаётся, к тому же, я имею возможность сформировать его в любом виде. Проблема в filename, но её я не передаю, а получаю.

#92:  Author: FlasherLocation: Москва PostPosted: Thu Oct 17, 2013 00:01
    —
Serge Yolkin
Аналогично. Попробуй сразу получать пути через SC.

#93:  Author: Serge Yolkin PostPosted: Thu Oct 17, 2013 01:16
    —
Вроде, работает:
Code:
Set SC = CreateObject("ScriptControl")
SC.Language = "JScript"
SC.AddCode("function FA(e){return(e);}")
content=SC.Run("FA",filename)
т.е. скрипт vbs, а в SC код js. Что там внутри - завтра смотреть буду. Наоборот - скрипт js, в SC код vbs - не работает, поскольку в SC значение js передать должен, а он не может...

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

Ткните носом, где про ScriptControl почитать. На MSDN всё в контексте C++/C#, даже addCode не видел. Есть ли у него возможность подгрузить js код из внешнего файла? Что-нибудь вроде loadFromFile, src=, или подобное...

#94:  Author: Serge Yolkin PostPosted: Thu Oct 17, 2013 08:42
    —
Мда... С помощью FSO.OpenTextFile в принципе работает... Хотелось бы попроще.
И ещё в скрипте, запущенном плагином WScript не определён - беда. Причём, CreateObject("WScript.Shell") OK, видимо, потому что передано строкой, а WScript.ScriptFullName - облом. echo и quit - та же история.

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

В общем, вот такая обёртка получилась:
Code:
Dim FS, SC, SH, TS
Set FS           = CreateObject("Scripting.FileSystemObject")
Set SH          = CreateObject("WScript.Shell")
TC                = SH.ExpandEnvironmentStrings("%COMMANDER_PATH%")
Set TS           = FS.OpenTextFile(TC & "\PlugIns\wdx\script\test.js")
TX                = TS.ReadAll()
Set SC          = CreateObject("MSScriptControl.ScriptControl")
SC.Language = "JScript"
SC.AllowUI    = false
SC.AddCode(TX)
TS.Close()
Set TS           = Nothing
content          = SC.Run("FA", filename, FS, SH)
Set SH          = Nothing
Set FS           = Nothing
Set SC          = Nothing
это vbs, а main.js пока такой:
Code:
function FA(e,f,s){
  var u=f.getBaseName(e);
  return(u);
}


Last edited by Serge Yolkin on Thu Oct 17, 2013 19:11; edited 1 time in total

#95:  Author: Lev PostPosted: Thu Oct 17, 2013 18:01
    —
Тестируем. Попытался удвоить слеши в filename.

#96:  Author: Serge Yolkin PostPosted: Thu Oct 17, 2013 18:54
    —
Lev
Спасибо, вроде заработало! А то чтение скрипта из скрипта заметно тормозило на больших папках.

Для тех, кто будет скриптить: надо определить все переменные
Content,
Content1,
...
Content9;
иначе ругается.

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

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


Last edited by Serge Yolkin on Thu Oct 17, 2013 19:26; edited 1 time in total

#97:  Author: Lev PostPosted: Thu Oct 17, 2013 19:25
    —
[fix] Не нужно определять переменные.
Тестируем по тому же адресу.

Кстати, года три назад присобачил передачу пареметра через ini, но не публиковал.

Пример:
Code:
script.ini
[param2]
Script=param2.vbs
parameter=a|b|c|d


Code:
'param2.vbs
cont=Split(parameter,"|")
Content=cont(0)
Content1=cont(1)

развлекайтесь :)

#98:  Author: Serge Yolkin PostPosted: Fri Oct 18, 2013 00:14
    —
Lev
Да, всё работает. Ещё раз спасибо.
А WScript имплементировать мона?
Не то, чтобы без него никак, но непривычно...

#99:  Author: FlasherLocation: Москва PostPosted: Fri Oct 18, 2013 00:35
    —
Serge Yolkin
Все вышестоящие вопросы сняты? Не было времени ранее ответить.

#100:  Author: Serge Yolkin PostPosted: Fri Oct 18, 2013 08:13
    —
Flasher
Да. А Васик прикольный...

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

Lev
Некоторые системные файлы, такие как pagefile.sys, hiberfil.sys и др. плагин не обрабатывает, т.е. их имена не передаются в скрипт. Я знаю, что к ним нет доступа, но это и хотел обработать скриптом. Можно ли это исправить?

Уточнение: pagefile.sys, hiberfil.sys обрабатываются, если включена обработка каталогов (ParseDirs=1), если выключена - нет.

Предположение: при ParseDirs=0 объект проверяется на файловость/папковость каким-то методом, и, если винда на это не отвечает (файлы-то особенные), считается папкой. Хотя, js-ный fileExists() определяет правильно...

Вывод: можно не исправлять, в скрипте отфильтрую...

#101:  Author: FlasherLocation: Москва PostPosted: Sat Oct 19, 2013 16:52
    —
Serge Yolkin wrote:
Да. А Васик прикольный...
Да - это хорошо. Значит, нашёл статьи про SC. А Васик как Васик, для меня основной прикол в компактности и читабельности кода. В остальном есть и свои +ы и -ы.

#102:  Author: Serge Yolkin PostPosted: Sat Oct 19, 2013 17:43
    —
Flasher
Как создать ScriptControl в js я знал, даже попробовал, но так проблема (уже исправленная) не решилась. Пришлось делать наоборот, вот и взялся за vbs. Пока чувствую себя, как на протезах. Не знаю: втянусь, или нет. Уж больно привык к длинным конструкциям в одну строчку. Но ковыряю потихоньку. Вот сейчас не нашел в js аналога Asc - пытаюсь на Васике что-то сделать.

Lev
Если я ещё не слишком достал, прошу заменить метод, получающий имена файлов/папок на тот, что с буквой W, а то с юникодными именами извращаться через Shell.Application.nameSpace приходится...

#103:  Author: FlasherLocation: Москва PostPosted: Sat Oct 19, 2013 18:02
    —
Serge Yolkin
 Офф.

#104:  Author: Serge Yolkin PostPosted: Sat Oct 19, 2013 18:53
    —
 Hidden text

#105:  Author: Serge Yolkin PostPosted: Tue Nov 05, 2013 13:17
    —
Тестовый скрипт - проверяет имена файлов на юникодность
Code:
var
 a=new ActiveXObject('Shell.Application'),
 f=new ActiveXObject('Scripting.FileSystemObject'),
 n=a.NameSpace(f.getParentFolderName(filename));

Content=fb(fa(filename));

function fa(e){return(f.getFileName(n.ParseName(f.getFileName(e)).path));}
function fb(e){return(/[^а-яё\x01-\xFF]/i.test(e));}
В целом работает, хотя тестировался на ограниченном наборе файлов, но я не об этом. Тот высокотехнологичный костыль (специалисты, наверняка, обратили внимание) нужен для полученя "нормального" виндового имени файла из короткого (8.3), которое плагин радостно передаёт скрипту.

И ещё, VBS'овский Asc не прокатил: некоторым юникодным (конкретно юникодным) символам он находит удивительные ANSI аналоги.

#106:  Author: FlasherLocation: Москва PostPosted: Tue Nov 05, 2013 13:52
    —
Serge Yolkin wrote:
короткого (8.3), которое плагин радостно передаёт скрипту
Не знал. Shocked

#107:  Author: Serge Yolkin PostPosted: Tue Nov 05, 2013 13:56
    —
Гениальный скрипт, подаривший мне знание
Code:
Content=filename;
Smile

#108:  Author: FlasherLocation: Москва PostPosted: Tue Nov 05, 2013 14:00
    —
Весело. Smile А так не пробовал?:
Code:
n=a.NameSpace(filename).Self.Path;

#109:  Author: Serge Yolkin PostPosted: Tue Nov 05, 2013 14:14
    —
Так на некоторых файлах (не на всех) выдаёт "неопознанную ошибку".

#110:  Author: FlasherLocation: Москва PostPosted: Tue Nov 05, 2013 15:09
    —
А сразу в секцию LongName=1 писал? Скорее да.
Вообще даёт тот же результат. Местами False, но в основном "Не удаётся найти указанный файл".
Рабочий вариант:
Code:
var
 WSH   = new ActiveXObject("WSCript.Shell"),
 Shell = new ActiveXObject('Shell.Application');

Content=fb(Shell.NameSpace(WSH.CurrentDirectory & "\\").ParseName(filename).Name);
function fb(e){return(/[^а-яё\x01-\xFF]/i.test(e));}


Last edited by Flasher on Tue Nov 05, 2013 18:54; edited 5 times in total

#111:  Author: Serge Yolkin PostPosted: Tue Nov 05, 2013 16:04
    —
Я с прошлого века на "настоящих" языках не кодил, но, насколько нахватался, у многих методов есть две инкарнации: типа, GetЧегоТоТам() и GetЧегоТоТамW(). Если проблема в этом, может, удастся уговорить уважаемого Lev на ещё одно обновление? Честное слово - последнее.

#112:  Author: Lev PostPosted: Tue Nov 05, 2013 18:09
    —
Крайнее :)
у меня "туду" потолще

#113:  Author: FlasherLocation: Москва PostPosted: Tue Nov 05, 2013 18:35
    —
Serge Yolkin
Up. Сейчас вроде работает.

#114:  Author: Serge Yolkin PostPosted: Tue Nov 05, 2013 22:41
    —
Lev wrote:
Крайнее Smile
OK. Когда сплавом занимался, тоже трепетно к этому слову относился.
Lev wrote:
у меня "туду" потолще
С нетерпением... Идея уж больно интересная, несмотря на минусы скриптовых решений. А советы дилетанта допускаются?
Flasher wrote:
Сейчас вроде работает
Э-э-э... Не въехал. Это о чём? (Я в 5 встал, туплю не по-детски...)

#115:  Author: FlasherLocation: Москва PostPosted: Wed Nov 06, 2013 00:01
    —
Serge Yolkin wrote:
Не въехал. Это о чём?
Переделанный скрипт выше (UP).

#116:  Author: Serge Yolkin PostPosted: Wed Nov 06, 2013 00:29
    —
Flasher
Да, работает. "&" на "+" заменить? Хотя, если поддержка плагина будет возобновлена - а на это есть надежда, - то можно и подождать Smile
 Hidden text

#117:  Author: FlasherLocation: Москва PostPosted: Wed Nov 06, 2013 00:44
    —
Serge Yolkin wrote:
"&" на "+" заменить?
Ну, получается, да. Помимо всего прочего.

#118:  Author: Serge Yolkin PostPosted: Wed Nov 06, 2013 00:57
    —
Flasher
Ещё: свойство Name объекта (файла), созданного ShellApplication не содержит расширения файла... Не то, чтобы критично, так - для информации.

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

В отличие от FSO

#119:  Author: FlasherLocation: Москва PostPosted: Wed Nov 06, 2013 01:10
    —
Serge Yolkin
Вообще-то ты ошибаешься. Ошибки поищи.

#120:  Author: Serge Yolkin PostPosted: Wed Nov 06, 2013 11:11
    —
Ага. На W7 (на работе) - содержит, на W8.1Preview (дома) - нет. Они такие мелкие и мягкие...

#121:  Author: Serge Yolkin PostPosted: Thu Nov 07, 2013 12:29
    —
Вот, решил проблему с критерием "юникодности" имени файла:
Code:
var   // проверяем на юникодность имена файлов, переданных короткими (8.3) именами
 a=new ActiveXObject('Shell.Application'),
 c=new ActiveXObject('MSScriptControl.ScriptControl'),
 f=new ActiveXObject('Scripting.FileSystemObject'),
 n=a.NameSpace(f.getParentFolderName(filename));

c.language='VBScript';
c.allowUI=false;
c.addCode(
'Function FC(E)\n'+
'  FC = ""\n'+
'  For i = 1 to Len(E)\n'+
'    FC = FC & Chr(Asc(mid(E,i,1)))\n'+
'  Next\n'+
'End Function\n'
);

Content=fb(fa(filename));

function fa(e){return(n.ParseName(f.getFileName(e)).path);}
function fb(e){var u=c.run('fc',e);return(f.fileExists(u)||f.folderExists(u));}
Asc, похоже, использует "общевиндовский" механизм замены символов Unicode, а видно файл после преобразования имени, или нет - пусть сама винда и разбирается. Попутно обнаружилось ещё одно воплощение проблемы с именами в плагине: папка с именем "Õ" не обрабатывается вообще, даже скриптом
Code:
Content=1;


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

На VBS, пожалуй, покороче будет, но сейчас не до этого. Кстати, нет ли в VBS команды, преобразующей строку Unicode в строку ANSI целиком, не по одному символу в цикле?

#122:  Author: FlasherLocation: Москва PostPosted: Sat Nov 09, 2013 15:22
    —
Serge Yolkin wrote:
короткого (8.3), которое плагин радостно передаёт скрипту
Забыл спросить, это тоже только на 8-ке? На семёрке имя полностью передаётся.

И я правильно понимаю, что ты вернулся к варианту проверки по знакам вопроса? Если да, то по логике должно было бы хватить этого:
Code:
Content = "Нет"
For i = 1 to Len(FileName)
  If Chr(Asc(Mid(FileName, i, 1))) = "?" Then
    Content = "Да" : Exit For
  End If
Next
Хотя вместо Да плагин возвращает почему-то пустое значение. Confused

#123:  Author: Serge Yolkin PostPosted: Sat Nov 09, 2013 18:18
    —
Flasher
Имя, например, "ЯÕ" у меня на всём коротким (точнее, более длинным, но валидным) передаётся, а "нормальные" - да, на семёрке нормально, на восьмёрке - коротким. Спасибо, что обратил внимание.

А проверка - нет, не по "?". Полное имя преобразуется с помощью Asc, результат скармливается fso.fileExists()|folderExists(). Если винда (точнее, её fileSystemObject) объект нашла - считаем имячко "ансишным", поскольку старые программы его тоже найдут. Если не нашла - что-то здесь не так...

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

Сейчас я конвертирую полное имя в цикле посимвольно, потому и спрашиваю:
Quote:
Кстати, нет ли в VBS команды, преобразующей строку Unicode в строку ANSI целиком, не по одному символу в цикле?

#124:  Author: FlasherLocation: Москва PostPosted: Sat Nov 09, 2013 18:24
    —
Serge Yolkin
Wait a second. Но ведь по логике винда найдёт все имена, где нет знаков вопроса? Или нет?

Вопрос видел. Стандартных методов преобразования нет.

Боюсь, что у плагина проблемы с возвратом юникодных имён. К примеру àéÿüĄŀĦĤŕž.ext +
Code:
Content = CreateObject("Shell.Application").NameSpace(CreateObject("WScript.Shell").CurrentDirectory).ParseName(filename).Name
даёт пустое значение.

#125:  Author: Serge Yolkin PostPosted: Sat Nov 09, 2013 18:44
    —
Flasher wrote:
винда найдёт все имена, где нет знаков вопроса
Не скажи... Пока я со всякими смайликами-солнышками игрался, на какие только варианты не насмотрелся. Да и цель - определить валидность имён для старых программ - так достигается более точно, чем построение собственных предпроложений.

#126:  Author: FlasherLocation: Москва PostPosted: Sat Nov 09, 2013 18:53
    —
Serge Yolkin
См. дописку. У тебя есть с этим проблемы?

#127:  Author: Serge Yolkin PostPosted: Sat Nov 09, 2013 18:57
    —
Да, и это не единственный вариант имени, которое не обрабатывается плагином совсем. Даже, если скрипт не трогает имена, а делает что-нибудь другое. Придётся подождать юникодной версии плагина.

#128:  Author: Serge Yolkin PostPosted: Sun Nov 10, 2013 20:35
    —
Ай нид хелп: в инишнике к старой версии был ключик, позволяющий обрабатывать и папки тоже, инишник в ходе экспериментов сильно пострадал, а в инишнике к последней версии этого ключа нет. Может кто-нибудь напомнить?

#129:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Nov 10, 2013 21:20
    —
Serge Yolkin
Все ключи, содержащиеся в старом инишнике, есть и в новом, хотя и с некоторыми вариациями, включая упоминание ParseDirs=0 в комментарии.

#130:  Author: Serge Yolkin PostPosted: Sun Nov 10, 2013 21:24
    —
Avada
Точно. Спасибо.

#131:  Author: Serge Yolkin PostPosted: Thu Nov 14, 2013 15:41
    —
Маленькое резюме моих "открытий":
- ключ LongName=0/1 переключает не длинные/короткие имена, как я думал, а длинные/полные имена, т.е. при 0 в filename только имя объекта, при 1 - имя с путём;
- ParseDirs=0 отключает не только обработку папок, но и некоторых файлов, таких как hiberfil.sys, pagefile.sys;
- плагином очень удобно пользоваться для подсветки определённых файлов/папок, если она нужна не часто, или, по крайней мере, не всегда: имя плагина и поля всегда одни и те же, настраиваем шаблон поиска и цвет для него, а в зависимости от подключенного скрипта подсвечиваться будет то что нужно;
- для отключения плагина можно создать пустой скрипт (нулевого размера) и переключаться на его секцию в инишнике;
- чтобы не захламлять папку плагина скрипты можно сложить в подпапку, или разложить по нескольким подпапкам, относительные пути вида Script=".\Scripts\test.js" в инишнике поддерживаются;
- если плагин заинтересовал не только меня, могу поделиться HTA утилиткой, которая навешивается на хоткей и позволяет менять активную секцию в инишнике;

прошу прощения, если это мой очередной велосипед, и всем нормальным людям всё это давно известно.

#132:  Author: FlasherLocation: Москва PostPosted: Thu Nov 14, 2013 17:02
    —
Serge Yolkin
Про hiberfil.sys, pagefile.sys не знал, да и не требовалось.
Serge Yolkin wrote:
- плагином очень удобно пользоваться для подсветки определённых файлов/папок, если она нужна не часто, или, по крайней мере, не всегда: имя плагина и поля всегда одни и те же, настраиваем шаблон поиска и цвет для него, а в зависимости от подключенного скрипта подсвечиваться будет то что нужно;
Не понял, пример приведи, пож-та.
Serge Yolkin wrote:
для отключения плагина можно создать пустой скрипт (нулевого размера) и переключаться на его секцию в инишнике;
Прямо таки отключения? Да и зачем?
Serge Yolkin wrote:
могу поделиться HTA утилиткой
На код глянуть можно. Хотя менять секцию можно и обычным путём.

#133:  Author: Serge Yolkin PostPosted: Thu Nov 14, 2013 17:44
    —
Flasher
Просто другая логика работы с плагином:
Плагин подключен, в тотале настроен шаблон поиска (у меня - highlight_plugin=script.Result = "!", но это на вкус), в [colors] настроена подсветка ColorFilter1=>highlight. В подпапке Scripts папки плагина - несколько скриптов, детектирующих определённые файлы/папки, в script.ini для каждого создана секция, в Section= та самая заглушка, которая "зачем". Ничего не подсвечивается. При необходимости, или остром желании, по хоткею вызываем утилитку, выбираем интересующий скрипт - в тотале подсвечены желаемые элементы. Через так же выбираем заглушку - всё как было. Чтобы в утилитке отображалось что-то более вменяемое, чем имена секций, в инишнике, в следующей после названия каждой секции строчке пишем комментарий (начинается с точки_с_запятой). Вот утиль:
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html>
<head>
  <title>Переключатель Script.wdx</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=8" />
  <script type="text/jscript" language="JScript">
    self.resizeTo(400,200);
    self.moveTo(200,100);
  </script>
  <hta:application
   applicationName="WDXScriptSwitcher-II"
   border="thin"
   icon="%SystemRoot%/system32/scrobj.dll"
   id="HTApp"
   innerBorder="no"
   maximizeButton="no"
   minimizeButton="no"
   selection="no"
   singleInstance="yes"
   version="0.2"
   />
  <style type="text/css">
   *{color:navy;font:normal 14px/16px Arial;margin:0;padding:0;}
   p{cursor:hand;padding:5px 10px;}
   p:hover{background-color:yellow;}

  </style>
</head>
<script type="text/jscript" language="JScript">
  var
   a=[],
   f=new ActiveXObject('Scripting.FileSystemObject'),
   o=HTApp.commandLine.replace(/^"|[^\\]+$/g,'')+'script.ini',p,q,r,s,t;

  s=f.openTextFile(o);
  t=s.readAll();
  s.close();
  q=t.match(/Section\=[^\n\r]+/)[0].split('=')[1];
  a=t.match(/\[\w+\](\s*;\s*[^\n\r]*)?/g);
  for(var i=0;i<a.length;i++){
    r=a[i].split(/\s*;\s*/);
    if(r[0]!='[Script]'){
      p=document.createElement('P');
      p.comment=r[0].replace(/^\[|\]$/g,'');
      p.innerHTML='•&emsp;'+(r.length>1?r[1]:r[0]);
      p.attachEvent('onclick',fa);
      if(p.comment==q)p.style.fontWeight='bold';
      document.documentElement.appendChild(p);
    }
  }

  function fa(e){
    self.resizeTo(0,0);
    self.moveTo(-100,-100);
    var u,v;
    t=t.replace(/Section\=[^\n\r]+/,'Section='+f.getFileName(e.srcElement.comment));
    s=f.openTextFile('script.ini',2);
    s.write(t);
    s.close();
    try{
      with(new ActiveXObject('WScript.Shell'))
       run(
        expandEnvironmentStrings('%COMMANDER_PATH%\\PlugIns\\util\\tccp.exe')+' 540',
        0,
        true
       );
    }catch(e){}
    window.close();
  }
</script>
</html>

#134:  Author: Lev PostPosted: Fri Nov 15, 2013 18:37
    —
Как вариант можно наделать ini файлов и копировать утилиткой нужный поверх script.ini, т.е. перезаписывать весь, вместо редактирования строк.
-----
Еще можно заводить отдельный script.lng для именования колонок.
Code:
[eng]
Result=ColumnName

[rus]
Result=ИмяКолонки

#135:  Author: Serge Yolkin PostPosted: Fri Nov 15, 2013 19:31
    —
Lev
Можно и скрипты хранить в архиве, вместе с инишниками, а распаковывать скриптом парами, поверх имеющихся, но это хорошо для готовой сборки, в прцессе написания отлаживать лучше ничего не удаляя, а то я тут выше уже жаловался, что инишник потерял совсем. Перезаписал, блин... Зато, обжогшись, научил утилитку генерить инишник при его отсутствии (болванка, конечно, но для всех имеющихся скриптов, включая подпапки).

#136:  Author: Serge Yolkin PostPosted: Sat Nov 16, 2013 16:51
    —
Дано: плагин (subj), связанный с ним шаблон поиска, привязанный к шаблону цветовой фильтр. Всё работает, всё подсвечивается, в пользовательской колонке отображается значение, возвращаемое плагином (скриптом). Красота. Меняем скрипт через инишник плагина (или правим сам скрипт - не важно), сохраняем, обновляем панель (Ctrl+R, или команда 540 - без разницы). Колонка обновляется сразу (иногда бывает ошибка на первом элементе в панели, но это мелочи), а вот с подсветкой - беда. Ни Ctrl+R, ни переключения сортировки, ни включение-выключение быстрого просмотра, не обновляют цветовой фильтр. Что подсвечивалось, то и подсвечивается. Помогает только переход в другую папку. В новой (а потом и в старой, если в неё вернуться) подсветка начинает работать.
Вопрос: нет ли какой команды в TC, которая бы обновила панель так, как будто мы только что зашли в папку. Скрипты, конечно, сила, но для переключения туда-обратно папок с сохранением положения курсора и выделения потребуются дополнительные компоненты, а этого хотелось бы избежать.

#137:  Author: sa PostPosted: Sat Nov 16, 2013 17:01
    —
Serge Yolkin
Команда cm_ReloadSelThumbs не поможет, случайно?

#138:  Author: Serge Yolkin PostPosted: Sat Nov 16, 2013 17:16
    —
sa
ВАУ! Команда 2918! Афигенное спасибо!

#139:  Author: sa PostPosted: Sat Nov 16, 2013 17:30
    —
Serge Yolkin
Я тоже в своё время порадовался, когда она довольно неожиданно пригодилась в похожей ситуации…

#140:  Author: Serge Yolkin PostPosted: Sat Nov 16, 2013 21:12
    —
Не критично, просто забавно: обновление панели командой 2918 работает в папках, не являющихся корневыми. В C:\ D:\ и т.д. подсветка не обновляется, да и характерного мигания панели (машинка тормозная) не видно. Хорошо, что проверял не на корневой, а то бы сразу ляпнул, что не работает...

#141:  Author: Serge Yolkin PostPosted: Sun Nov 17, 2013 23:39
    —
Ещё один вариант обновления панелей: команда 2011 дуплетом, т.е. отправленная два раза, чтобы не изменилось отображение скрытых/системных. Обновляет обе панели при любых открытых папках и, кажется, при любых настройках TC (2918 не работает, если сохранение эскизов отключено). Но немного медленнее 2918, всё-таки две команды - не одна.

#142:  Author: FlasherLocation: Москва PostPosted: Mon Nov 18, 2013 20:10
    —
Serge Yolkin
А смена окна обновляет?

#143:  Author: Serge Yolkin PostPosted: Tue Nov 19, 2013 09:35
    —
Нет.

#144:  Author: FlasherLocation: Москва PostPosted: Tue Nov 19, 2013 10:56
    —
У меня на XP/7 x86 обновляет без проблем.

#145:  Author: Serge Yolkin PostPosted: Tue Nov 19, 2013 12:56
    —
Сейчас искать лень, но, скорее всего, - разные настройки TC.

#146:  Author: FlasherLocation: Москва PostPosted: Tue Nov 19, 2013 14:57
    —
Замаймь мне первую секцию - протестю.

#147:  Author: Serge Yolkin PostPosted: Tue Nov 19, 2013 17:32
    —
Вот (если первая - это Configuration):
 Hidden text

#148:  Author: FlasherLocation: Москва PostPosted: Tue Nov 19, 2013 20:32
    —
Serge Yolkin
В общем, не влияет. Влияет комбинация подсветки элементов с ТС-шными атрибутами/датами.

#149:  Author: Serge Yolkin PostPosted: Wed Nov 20, 2013 10:31
    —
Flasher
OK. Спасибо.

#150:  Author: Ciber SLasHLocation: С.-Петербург PostPosted: Thu Dec 05, 2013 16:17
    —
Плагин так и не поддерживает запуск нескольких скриптов?
Типа:
Section=test1|test2|test3

#151:  Author: Lev PostPosted: Fri Dec 06, 2013 18:33
    —
Т.е. каждый файл в окошке должен быть обработан несколькими скриптами, а какие кому колонки заполнять вы в скриптах укажете? Почему нельзя тогда сделать комби-скрипт?

#152:  Author: Ciber SLasHLocation: С.-Петербург PostPosted: Fri Dec 06, 2013 23:28
    —
Есть к примеру 3 колонки [=script.Result][=script.Result1][=script.Result2]
Как сделать, чтобы в колонке 1 отрабатывал script1.vbs, в колонке 2 отрабатывал script2.vbs, в колонке 3 отрабатывал script3.vbs ?

#153:  Author: Serge Yolkin PostPosted: Sat Dec 07, 2013 17:10
    —
Последнее слово - за автором плагина, конечно, но, по-моему, проблем с этим будет больше, чем профита: 1. призводительность (скриптовые технологии - не самые быстрые); 2. конфликты - что делать, если скрипты пишут в одну и ту же колонку? 3. реализовать то же (до 9 колонок) проще в одном скрипте, чем решать проблемы в плагине... А если отвечать на вопрос
Quote:
Есть к примеру 3 колонки [=script.Result][=script.Result1][=script.Result2]
Как сделать, чтобы в колонке 1 отрабатывал script1.vbs, в колонке 2 отрабатывал script2.vbs, в колонке 3 отрабатывал script3.vbs ?
буквально - то слить все три скрипта в один, и писать результаты в переменные Content, Content1 и Content2...

#154:  Author: AlexShu PostPosted: Wed Jan 08, 2014 01:25
    —
Ради интереса установил плагин. Добавил 9 колонок (ini не трогал). Нажал Ctrl+B. Начал быстро прокручивать список. Плагин выдал две ошибки:
Code:
---------------------------
Crash in plugin script.wdx:
External exception EEDFADE
---------------------------
+
---------------------------
Crash in plugin script.wdx:
Access violation at address 03AA239C. Read of address AFF60B25
---------------------------

С одной колонкой (при тех же настройках) ошибок нет.

Win7 x64
TC 8.01 x32

#155:  Author: FlasherLocation: Москва PostPosted: Wed Jan 08, 2014 21:45
    —
AlexShu
Колонки-то с одним ит тем же содержимым?

#156:  Author: AlexShu PostPosted: Thu Jan 09, 2014 05:20
    —
Flasher wrote:
AlexShu
Колонки-то с одним ит тем же содержимым?

Нет. Информация только в первой колонке. Остальные пустые.
Я просто добавил все поля из этого списка.

Больше ничего не менял.

#157:  Author: FlasherLocation: Москва PostPosted: Thu Jan 09, 2014 13:14
    —
AlexShu
Так, а зачем? Чисто для эксперимента? Если там данных нет, то и смысл их добавлять?

#158:  Author: AlexShu PostPosted: Fri Jan 10, 2014 01:25
    —
Flasher wrote:
Чисто для эксперимента?

Да.

Плюс в Readme написано:
Code:
версия 0.2 - тестовая версия, для проверки работы более чем с одной колонкой

Вот я и протестировал.

#159:  Author: Lev PostPosted: Fri Jan 10, 2014 18:23
    —
К сожалению, crash-информация мне никак не пригодится, скиллов не хватает. По идее, незадействованные колонки не должны никак влиять на правильность работы плагина, в них изначально загоняется пустая строка.

#160:  Author: Mailk PostPosted: Wed Feb 05, 2014 01:20
    —
Lev wrote:
Почему нельзя тогда сделать комби-скрипт?

Кто нибуть напишите скрипт для обработки контекстного CDocProp(или ShellDetails) +translit.
Зачитка инфы из файл + последующая трансляция (превод) этого и вывод обработанного в кололнку. Просто последовательная работа двух контекстных плагинов.

Я не програмер.

#161:  Author: FlasherLocation: Москва PostPosted: Wed Feb 05, 2014 18:10
    —
Mailk
Для перевода как минимум словарь нужен. Он есть (хотя бы в формате ttb)?

#162:  Author: Reys PostPosted: Thu Feb 06, 2014 02:22
    —
Помогите решить такой вопрос. Есть плагин и есть три скрипта. Как должен выглядеть script.ini, чтобы отрабатывалась любая из трех задач? Или под каждый скрипт нужно создавать отдельный файл?

#163:  Author: FlasherLocation: Москва PostPosted: Thu Feb 06, 2014 08:43
    —
Reys
3 пост сверху страницы. Также можно пользоваться методом Execute, читая любой из скриптов с нужными функциями.

#164:  Author: Reys PostPosted: Thu Feb 06, 2014 16:58
    —
Flasher
Конечная цель - создание нескольких шаблонов поиска. Скрипты применяются к разным объектам, в разное время и по разным поводам. Вместе - никогда.
Соответственно, варианты реализации, которые я вижу:
1. плагин работает с несколькими скриптами и создает для каждого свой Result, Result1, Result2 и т.д.
2. для каждого скрипта регистрировать отдельную копию плагина script_1, script_2 и т.д.
3. юзать доп.скрипт, который перед запуском основного будет менять содержание script.ini на необходимое.
К сожалению, в силу своей необразованности, сам сделать не могу. А фраза "пользоваться методом Execute, читая любой из скриптов с нужными функциями" - для меня вообще набор слов Sad сорри...

#165:  Author: FlasherLocation: Москва PostPosted: Thu Feb 06, 2014 19:27
    —
Reys
1. Об этом и речь. Только каркас и вызов функции из других скриптов.
2. Некоторые так и делают, но я бы не рекомендовал.
3. Сомневаюсь, что при таком подходе будут работать сочетания подобных полей данных.
"Сам не могу", а кто те 3-и скрипта делал?

#166:  Author: Reys PostPosted: Thu Feb 06, 2014 21:42
    —
Quote:
а кто те 3-и скрипта делал?

Известно кто - Batya Smile
Сам юзаю 2 вариант, а с первым - понимаю только суть. Каким образом три скрипта сливаются в один?

#167:  Author: Mailk PostPosted: Thu Feb 06, 2014 23:06
    —
Flasher wrote:
Mailk
Для перевода как минимум словарь нужен. Он есть (хотя бы в формате ttb)?

Да есть , например перевод Гост в ISO стандарт для спецификации САПР, если надо что то другое то переведу для транслятора. Требуется превод наименований из спеификации на английский или китайский, будет плагин начну писать многое.
Для меня конкретно щас волнует, а так я бы хотел преводчик плагин типа транслятора (транслятор тупой очень не видет все слово целиком) придется сортировать по длинным и коротким словам.
у а вобще работая с китайцами очень хочется транслировать или видеть их загагули преведенные.
Двойной плагин нужен и в других отношениях, например превод треков или полей в других файлах. Я только об одной вещи говорю. Я думаю задач много будет. Желательно универсальный кажому свое требуется последовательно сделать.

#168:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Feb 07, 2014 00:02
    —
Mailk
Во-первых, зачем про одно и то же расписывать в разных темах? Здесь мало? Во-вторых, свои мысли хорошо бы научиться в конце концов излагать по-русски (язык предыдущего поста при таком чудовищном количестве ошибок, вынужден огорчить, русским считать невозможно). Предупреждать об этом уже надоело. Видимо, придётся просто начать удалять подобные посты, потому это не техзадание, а издевательство над теми, кто это вынужден читать. И не надо больше про "много задач". Тут с одной-то эпопея с прошлого года тянется..

#169:  Author: FlasherLocation: Москва PostPosted: Fri Feb 07, 2014 00:30
    —
Reys wrote:
Известно кто - Batya
Batya-то известен, совершенно неизвестно, что автором обсуждаемого именно он является. Ссылки на скрипты будут?
Reys wrote:
Каким образом три скрипта сливаются в один?
Нет смысла без должных знаний языка это объяснять на словах, иначе опять уткнёмся в тёмный лес. Слить помочь могу, но, думаю, что - только в выходные.

Avada wrote:
а издевательство над теми, кто это вынужден читать
Подписываюсь.

#170:  Author: Reys PostPosted: Fri Feb 07, 2014 01:31
    —
Flasher
Я хотел не столько решить конкретную задачу, сколько найти относительно простой инструмент и научиться им пользоваться. Если сам не смогу, тогда не имеет смысла делать за меня. Спасибо за предложенную помощь. Оставлю пока как есть и буду ждать новую версию плагина.

#171:  Author: Serge Yolkin PostPosted: Fri Feb 07, 2014 10:21
    —
Reys wrote:
... и научиться им пользоваться.
Уважаю. Применительно к данному плагину это означает - освоить один из двух скриптовых языков: JS или VBS (можно оба). Достаточно базового уровня. Полезно и без плагина.

#172:  Author: Mailk PostPosted: Fri Feb 07, 2014 17:15
    —
Avada wrote:
Mailk
Во-первых, зачем про одно и то же расписывать в разных темах? Здесь мало? Тут с одной-то эпопея с прошлого года тянется..


Тут про работу двух последовательно плагинов, и пример в качестве вытаскивания инфы из файла и ее трансляция. А там про непосредственно плагин транслятор и его проблемы и что нужно.Странно что не кому не нужно последовательна работа двух плагов, так как иногда нужно функции обоих. А так как вроде есть подобный то не кто не пишет или не добовляет другие функции.

#173:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Feb 07, 2014 17:15
    —
Reys
Можно посмотреть на этот относительно простой скрипт.
Обрати внимание - здесь результат каждой колонки через переменные content, content1, content2 получается обращением к функции Result с разными параметрами. В данном случае удобно использовать одну функцию, т.к. возвращаемые результаты весьма схожи по принципу получения. Однако, таким же образом можно использовать вызов различных функций, например:
Code:

'...
content  = Result
content1 = Result1
content2 = Result2
'...

Function Result
'...
End Function

Function Result1
'...
End Function

Function Result2
'...
End Function

В данном случае каждая функция - это отдельный независимый код. Т.о., чтобы слить вместе несколько скриптов, нужно каждый из них описать, как отдельную функцию.
Лучше дай ссылки на необходимые тебе скрипты. Здесь тебе их сольют (я, Flasher или ещё кто-нибудь), а ты наглядно увидишь, как это делается и будешь при необходимости сам это делать в дальнейшем.

#174:  Author: Ciber SLasHLocation: С.-Петербург PostPosted: Sun Apr 26, 2015 19:13
    —
Есть какая-либо альтернатива этому неразвивающемуся плагину?
Нужны колонки в зависимости от выбранного поля.
Т.е. чтобы не нужно было копировать один и тот же плагин 100-500 раз, чтобы можно было написать разные скрипты для разных колонок.

#175:  Author: FlasherLocation: Москва PostPosted: Sun Apr 26, 2015 22:19
    —
Ciber SLasH wrote:
Нужны колонки в зависимости от выбранного поля.
Где и как выбранного?

#176:  Author: Ciber SLasHLocation: С.-Петербург PostPosted: Mon Apr 27, 2015 00:44
    —
Пример: есть script1, script2, script3. Они выполняют разные действия.
Нужно создать набор колонок1: с колонкой результата script1 и с колонкой результата script2.
Нужно создать набор колонок2: с колонкой результата script3.

#177:  Author: FlasherLocation: Москва PostPosted: Tue Apr 28, 2015 11:34
    —
Если бы вместо переменных contentX был массив, и content(X) возращал бы единицу в случае обращения в соотв. элементу массива, то проблем с обращением к тому или иному скрипту не было.
Code:
For i = 0 To 9
 If Content(i) = 1 Then Exit For
Next
Execute CreateObject("Scripting.FileSystemObject").OpenTextFile(CreateObject("WScript.Shell")._
Environment("Process")("COMMANDER_PATH") & "\Plugins\wdx\Script\Name_" & i & ".vbs").ReadAll

#178:  Author: Серёга Иваш PostPosted: Tue Dec 15, 2015 21:03
    —
Добрый день, Уважаемые!
Не могу скачать плагин, страница закачки почила.
Поделитесь, будьте милостивы!
Заранее спасибо!

П.С.: На 64-разрядной оси будет ехать?

#179:  Author: FlasherLocation: Москва PostPosted: Tue Dec 15, 2015 21:27
    —
Серёга Иваш
Не ленимся искать. Ссылка здесь. Версия x32. Работать будет, как и любой плагин, на TCx32 и на любой актуальной оси.

#180:  Author: wOxxOm PostPosted: Tue Jan 05, 2016 00:20
    —
Понадобилось вдруг вывод размера в гигабайтах (гибибайтах) с точностью 2 знака после запятой, готовых решений не нашел, мб кому пригодится:

Code:
with CreateObject("Scripting.FileSystemObject")
   Content = FormatNumber(.GetFile(filename).size / 1073741824, 2)
end with

#181:  Author: FlasherLocation: Москва PostPosted: Tue Jan 05, 2016 18:00
    —
wOxxOm, так при LongName=0 покажет правильную единицу измерения (Гб - там, где они есть):
Code:
With CreateObject("Shell.Application").NameSpace(CreateObject("Wscript.Shell").CurrentDirectory)
  Content = .GetDetailsOf(.ParseName(FileName), 1)
End With

#182:  Author: wOxxOm PostPosted: Tue Jan 05, 2016 20:01
    —
Flasher, спасибо, тоже полезно, но не мне, т.к. количество разрядов не постоянное: то один, то два (если файл больше 10ГБ, то один разряд).

#183:  Author: FlasherLocation: Москва PostPosted: Tue Jan 05, 2016 20:06
    —
wOxxOm wrote:
если файл больше 10ГБ, то один разряд
Хм. Не знал.

#184:  Author: FlasherLocation: Москва PostPosted: Mon Feb 08, 2016 11:17
    —
Mailk
По запросу версий для SLDPRT, SLDLFP, SLDASM.

Пишем в script.ini, например:
Code:
[Script]
Section=SolidFileVersion
[SolidFileVersion]
Script=SolidWorksFile_Version.vbs
и рядом кидаем
 SolidWorksFile_Version.vbs
Result покажет версию, Result1 - релиз.
P.S.: Тестировал только на том, что приложено. Остальное нужно проверять.


Last edited by Flasher on Mon Feb 15, 2016 05:32; edited 6 times in total

#185:  Author: Mailk PostPosted: Tue Feb 09, 2016 03:47
    —
Класс! Спасибо уважаемый ! Показывает, правда не везде, я скинул где не показывает там же по ссылке яндех. за одно проверте правильно ли я плагин подправил. И еще нет ли возможности еще данные вытащить очень нужна ссылка на путь, она в сборке SLDASM точно прописывает и большую кучу их. А вообще в идеале отдельный САПР.WDX скрит для многих систем у 4-6 одно ядро паросолид. наверно похоже и данные пишут. В любом случее спасибо!

Кстати я делаю работу 2-х плагинов через изменение атрибутов , CDocProp "зачитывает данные из файла"->translit "изменяет по таблице" переводит данные
так можно устроить работу 2-х плагинов с изменением значений. А иногда нужно без , просто показать но не как...

#186:  Author: FlasherLocation: Москва PostPosted: Wed Feb 10, 2016 02:35
    —
Mailk wrote:
Показывает, правда не везде, я скинул где не показывает там же по ссылке
Исправил.
Mailk wrote:
за одно проверте правильно ли я плагин подправил.
script.ini? А чего там проверять, если там то же самое, что я дал?
Mailk wrote:
и большую кучу их
Вот именно. Для колонок куча не годится.
Mailk wrote:
А вообще в идеале отдельный САПР.WDX скрит для многих систем у 4-6 одно ядро паросолид.
С этим не ко мне.
Mailk wrote:
можно устроить работу 2-х плагинов с изменением значений
Какую работу и каких значений?

#187:  Author: Mailk PostPosted: Fri Feb 12, 2016 15:21
    —
Работает скрипт но есть 1-5% файлов что выводят вместо версии "за предемами файла"

Posted after 54 seconds:

Там же на яндехсе файлы что выводят это "нерабочии 2"

#188:  Author: FlasherLocation: Москва PostPosted: Fri Feb 12, 2016 15:36
    —
Изменил B на 512. См. 33000. Вероятно, для этих файлов больше требуется. Можно подбирать подходящее значение, накидывая по 50-100. Строкой ниже идёт 50. Его тоже можно слегка повысить с приблизительным значением округлённого числа 33000/512*0.8.

#189:  Author: Mailk PostPosted: Fri Feb 12, 2016 17:50
    —
Есть ошибка в определении версии 7000 высвечивает как 2015 (а должна быть 2014) Это важно! В этом то и беда Smile А так все гуд пишет баг убран! Еще бы что то вытащить.. типа О"бозначение" и "наименование" . Пробблемные кинул файлы туда же.

#190: Работа одновременно двух плагинов Author: Mailk PostPosted: Sun Feb 14, 2016 02:56
    —
попытаюсь показать работу одновременно двуз плагинов . Я как то просил об этом. но только переименование без показа колонок.
1 Было


2 сделал без стерании предыдущего значение


3 сделал только значения транслированные

#191:  Author: FlasherLocation: Москва PostPosted: Sun Feb 14, 2016 16:30
    —
Mailk wrote:
Пробблемные кинул файлы туда же.
Исправлено.
Mailk wrote:
Еще бы что то вытащить.
Боюсь, там только WinAPI поможет. Для этого нужно клепать полноценный плагин на среднеуровневом языке. Желающие тут вряд ли появятся, а фриланс-порталы я и раньше предлагал.

#192:  Author: Mailk PostPosted: Mon Feb 15, 2016 03:10
    —
Смотрит все, все версии вроде правильно , спасибо !
По поводу АПИ, есть плагин Shelldetal он показывает все что есть в свойствах файла если свойство смотреть через проводник. Апи не нужен ему.
Но например я работаю в 64х но Тотал 32х и поэтому не показывает не чего... а 64 х ТС не хочу , много плагинов не работают которые нужны мне.

#193:  Author: FlasherLocation: Москва PostPosted: Mon Feb 15, 2016 05:55
    —
Mailk wrote:
спасибо !
Пож-та. Я там ещё сущую мелочь поправил.
 OFF
Есть возможность временно перевести винду в английскую локаль (можно точку восстановления сделать)? Хотел бы список (не картинку) всех необходимых полей с возвращаемыми данными в свойствах этих файлов увидеть. Заодно стоит проверить данный скрипт на предмет полезности данных SW-файлов.

#194:  Author: Mailk PostPosted: Tue Feb 16, 2016 15:56
    —
скрипт дал техтовик с описанием инфы по файлу. но общей без данных по колонкам WDX..
Впринципе очень интересен, но нужно вписывать в него данные, те что показывает хотя бы проводник в свойствах файла. Тогда плагин WDX строчки 1,2,3 может их показывать в колонке. Но коментарии в этом случае наилучшее решение. Как совместить ?


Last edited by Mailk on Wed Feb 17, 2016 12:09; edited 2 times in total

#195:  Author: Lev PostPosted: Tue Feb 16, 2016 22:07
    —
А чего не так с закачкой плагина с основной страницы? Почему в некоторых постах:
http://forum.wincmd.ru/viewpost.php?p=114159
http://forum.wincmd.ru/viewpost.php?p=114612
советуют скачивать тестовую версию упомянутую внутри темы? Или основная работает хуже тестового варианта?

#196:  Author: FlasherLocation: Москва PostPosted: Wed Feb 17, 2016 12:44
    —
Mailk wrote:
Впринципе очень интересен
Кто?
Mailk wrote:
но нужно вписывать в него данные, те что показывает хотя бы проводник в свойствах файла
Куда - в него?

Lev
На тот момент не качалось.
Доработать плаг нет желания? Есть ещё необходимость не писать Content = при наличии возвращённого значения из процедуры/функции. И ещё было бы крайне полезно добавить возможность взаимодействия плагина с сохранённым в сборке интерпретатором, а не из system32. Ключик в ini c поддержкой переменной среды не помешал бы.

#197:  Author: Lev PostPosted: Wed Feb 17, 2016 17:56
    —
Пока доработки плагина на длительной паузе. Только todo иногда дополняю.
Что за интерпретатор в сборке? wscript/cscript.exe? Есть машины без них?
Что за переменные среды? %TEMP%, %PATH% или ещё чего-то?

#198:  Author: FlasherLocation: Москва PostPosted: Wed Feb 17, 2016 18:05
    —
Lev wrote:
wscript/cscript.exe? Есть машины без них?
Да, а какой же ещё? Дело не в "без них", а в необходимости подключать сторонние компонеты без прямой реги.
Переменная - %COMMANDER_PATH% (для указанного ключа).

#199:  Author: Mailk PostPosted: Wed Feb 17, 2016 21:52
    —
Flasher wrote:
Mailk wrote:
спасибо !
Есть возможность временно перевести винду в английскую локаль (можно точку восстановления сделать)? Хотел бы список (не картинку) всех необходимых полей с возвращаемыми данными в свойствах этих файлов увидеть. Заодно стоит проверить данный скрипт на предмет полезности данных SW-файлов.


Вот этот скрипт. Я про него.

#200:  Author: FlasherLocation: Москва PostPosted: Wed Feb 17, 2016 21:57
    —
В приведённой цитате нетрудно обнаружить знак вопроса и пожелание до указания на скрипт (никакой это не плагин).
Если скрипт никаких требуемых данных не приводит, то чем он может быть интересен? Ничем.

#201: Помощь в скрипте и плагине Author: Mailk PostPosted: Wed Feb 24, 2016 19:20
    —
Нужен инженерный документо-оборот что то типа PLM/PDM система.
Смысл в том чтобы выводить "коментарии" в колонке и через разные
файлы (обозначение.ion, наименование.ion, класификатор .ion). ТИП
Фаила о котором заносится коментарии значении не имеет. то есть
коментарии разные в разных файлах ion об одном файле. Пластина.dwg и о нем "коментарии" в файлах обозначение.ion, наименование.ion, класификатор.ion ....ion
и они содержат разную инфу по одному этому файлу которая отдельно выводится и сортируется. ну как в базе об файле разные значения хранятся. только тут в разных об одном..
Я испраил скрипт выводит "грин" но не дает в столбце.. понимаю что непреднозначен, можно поправить ?!!! Помогите...
 Hidden text

#202:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Feb 24, 2016 19:59
    —
Mailk
Коды такого размера надо убирать под спойлеры.

#203:  Author: FlasherLocation: Москва PostPosted: Wed Feb 24, 2016 20:41
    —
Да этот скрипт (1, 2, 3) вообще сюда не надо выкладывать. Править его под SCP - глупость.
Да и SCP тут не нужен по сути. Есть tc|Комментарий|Pег.выраж.
Хотя нет, я с покраской спутал, тут же нет шаблонов, и строки типа [=tc.Комментарий.Рег.выраж:...] тут не поддерживаются.


Last edited by Flasher on Wed Feb 24, 2016 23:05; edited 1 time in total

#204:  Author: Mailk PostPosted: Wed Feb 24, 2016 22:35
    —
А можно реализовать информация об одном файле в нескольких разных файлах и чтоб в колонки сортировать? Вторая есть проблема в Script.WDX постоянно падает при большом количестве файлов! очень раздрожвет. Может есть каой то вариант по другому? Без коментариев в в ТХТ или другой формат? просто смысл простой вводить паетно данные о файле в разные файлы с разными названиями.. и желательно потом поиск и тд.

#205:  Author: FlasherLocation: Москва PostPosted: Thu Feb 25, 2016 00:34
    —
 Можно и без файлов:

#206: Спасибо за идею !!! Author: Mailk PostPosted: Fri Feb 26, 2016 14:05
    —
Да как то не ожидал что проще не куда ! Очень порадовало. Простота и совместимость с другими WDX, плюс возможность создавать шаблоны для внесения изменений !
Total commander PDM / PLM удобней нет и врятли будет !

#207:  Author: Skif_off PostPosted: Fri May 13, 2016 15:59
    —
Появился новый плагин WinScript Advanced Content Plugin (x86\x64), функционал аналогичен, автор заверяет о совместимости сo скриптами для Script Content Plugin.

P.S. Забавное совпадение, буквально неделю назад общался с Lev на предмет вероятности появления х64-версии...

#208:  Author: FlasherLocation: Москва PostPosted: Fri May 13, 2016 16:09
    —
Quote:
* Unlimited number of simultaneously working scripts in one group of columns;
* Stable and fast
Code:
[Script]
ActiveScripts=CheckEncoding|Signature|MyScript
Ю-ху-ху! Не прошло и 88 лет. )))

Skif_off, спасибо за новость!

#209:  Author: Gentoo69 PostPosted: Wed May 18, 2016 23:36
    —
Skif_off wrote:
Появился новый плагин WinScript Advanced Content Plugin (x86\x64), функционал аналогичен, автор заверяет о совместимости сo скриптами для Script Content Plugin.

Создал тему здесь.

#210:  Author: Lev PostPosted: Tue May 31, 2016 19:53
    —
Очень хорошо! :)
А то я пару-тройку недель назад заморочился над доделками своего плагина и застрял на поисках компилятора под x64, а теперь и возиться не надо.

#211:  Author: Skif_off PostPosted: Thu Jul 21, 2016 21:51
    —
Lev
В WinPE на базе WinXP SP2 вылетает ошибка
Quote:
Crash in plugin script.wdx:
External exception EEDFADE

с любым скриптом, по две-три (или даже по четыре) штуки на каждый файл в файловой панели, а в нормальной WinXP SP3 и Win7x64 - ничего подобного.
Куда бы копнуть? dll-зависимости вроде удовлетворены, остаются COM и/или WMI.

#212:  Author: FlasherLocation: Москва PostPosted: Thu Jul 21, 2016 21:55
    —
Skif_off
Перенести скрипты в WACP не судьба? Wink

#213:  Author: Skif_off PostPosted: Thu Jul 21, 2016 22:08
    —
Flasher
А почему не спросил, работают ли те же скрипты в WACP? Smile К слову, работают. Просто подумал, что может вылезти где-то ещё в JS/VBS, ведь Lev вряд-ли использует экзотику, а если чего-то явно не хватает - добавлю, если это достаточно быстро (например, чтобы заработал ChmKeyword.js для AkelPad'а, понадобилось добавить в реестр всего несколько строк, и нашёл их сравнительно быстро).
Хотя сейчас думаю, что, наверное, смысла особо и нет Smile

#214:  Author: FlasherLocation: Москва PostPosted: Thu Jul 21, 2016 22:17
    —
Skif_off
Не спосил, ибо не сомневался. Наоборот у WACP есть вещи, не работающие у SCP. Плюс он быстрее из-за предзагрузки скриптов в память.
У AkelPad-а же свои завязки, т.ч. сюда его подмешивать не стоит. Wink

#215:  Author: Skif_off PostPosted: Thu Jul 21, 2016 22:22
    —
Flasher wrote:
У AkelPad-а же свои завязки, т.ч. сюда его подмешивать не стоит.

Дык AkelPad далеко не только свои собственные объекты использует Wink Там была проблема с вполне себе системным hhctrl.ocx.

#216:  Author: FlasherLocation: Москва PostPosted: Thu Jul 21, 2016 22:33
    —
Skif_off
Я понимаю. Но там реализация иная. А тут фактически аналоги.

#217:  Author: ParazitLocation: Россия PostPosted: Wed Nov 16, 2016 06:53
    —
А как сделать так, чтобы в колонки не выводились кракозябры, когда файлы, для которых выводятся колонки имеет кодировку UTF-8?
В файлах с ANSII - всё нормально выводит.
Возможно ли такое побороть?

#218:  Author: fundukLocation: Санкт-Петербург PostPosted: Wed Nov 23, 2016 15:53
    —
Parazit
Перейти на более новый плагин http://forum.wincmd.ru/viewtopic.php?t=16067

#219:  Author: ParazitLocation: Россия PostPosted: Thu Nov 24, 2016 03:17
    —
funduk, я как раз, на него недавно перешёл. Они явно сделаны на одном движке. Поэтому вывод колонок абсолютно идентичен.

#220:  Author: FlasherLocation: Москва PostPosted: Thu Nov 24, 2016 03:32
    —
Parazit
Приведите лучше код и место кодировки.

#221:  Author: ParazitLocation: Россия PostPosted: Thu Nov 24, 2016 11:02
    —
Вот скрипт

 Скрипт

#222:  Author: FlasherLocation: Москва PostPosted: Thu Nov 24, 2016 17:04
    —
А место кодировки? Где подопытный? Так не разобраться.
Но уже очевидно, что проблема в коде. Прежде чем скрипт приспосабливать к плагину, обычно проводят локальный тест с MsgBox, который показал бы что плагин к этому отношения иметь не должен.
OpenTextFile не умеет читать файлы в UTF-8. Для этого используется ADODB.Stream. Но если учесть, что заголовок может иметь разную кодировку, то прежде нужно узнать какая она. В html можно смотреть
Code:
<meta charset="кодировка"
<meta http-equiv="Content-Type" content="text/html; charset=кодировка"
Нужные теги можно читать с пом. htmlfile, можно и c Regexp, но 1000 символов в ряде случаев может не хватить.
Если это не HTML, то нужны тестовые файлы.

#223:  Author: ParazitLocation: Россия PostPosted: Sun Dec 11, 2016 19:50
    —
Flasher, а почему у меня этот скрипт не работает?


 Скрипт


Пишит, что требуется объект WScript.
Ну мы же знаем, что его создавать не надо.

#224:  Author: FlasherLocation: Москва PostPosted: Mon Dec 12, 2016 17:19
    —
Parazit
Объект WScript этими плагинами не поддерживается.
Каков смысл в получении родительской папки скрипта?
Вот эта вещь
Code:
Result = Result & oSubFolder.Files.Count
в цикле при наличии в папке скрипта 10 файлов вернёт 10101010101010101010. Т.е. 10 раз по 10. К чему это вообще?
Если нужно получать число файлов структуры каждого каталога, то для этого есть [=dirsizecalc.File Count].

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

#225:  Author: ParazitLocation: Россия PostPosted: Tue Dec 20, 2016 11:23
    —
Flasher, ну так как мне организовать такой скрипт?

#226:  Author: FlasherLocation: Москва PostPosted: Tue Dec 20, 2016 16:07
    —
Parazit
Какой такой? ТЗ не вижу.

#227:  Author: ParazitLocation: Россия PostPosted: Tue Dec 20, 2016 17:26
    —
Flasher, вывести в колонку Files.Count

#228:  Author: FlasherLocation: Москва PostPosted: Tue Dec 20, 2016 17:33
    —
Code:
With CreateObject("Scripting.FileSystemObject")
  If .FolderExists(FileName) Then Content = .GetFolder(FileName).Files.Count
End With


Last edited by Flasher on Tue Dec 20, 2016 18:49; edited 1 time in total

#229:  Author: ParazitLocation: Россия PostPosted: Tue Dec 20, 2016 18:17
    —
Flasher, это весь скрипт? Если да, то он выводит только "Invalid character"

#230:  Author: FlasherLocation: Москва PostPosted: Tue Dec 20, 2016 18:37
    —
Parazit
Не должен.
Code:
[Script]
Section=FilesCount

[FilesCount]
Script=FilesCount.vbs
ParseDirs=1
LongName=1

#231:  Author: ParazitLocation: Россия PostPosted: Tue Dec 20, 2016 19:18
    —
Flasher, спасибо, работает

#232:  Author: ParazitLocation: Россия PostPosted: Thu Jan 05, 2017 15:54
    —
Flasher, а как вывести имя файла (ов) в подпапках?

Code:

With CreateObject("Scripting.FileSystemObject")
  Content = .GetFolder(FileName).Files.GetFileName
End With

#233:  Author: FlasherLocation: Москва PostPosted: Fri Jan 06, 2017 02:20
    —
Parazit
В каком виде? Имя подле каждого объекта и так есть по умолчанию.

#234:  Author: ParazitLocation: Россия PostPosted: Fri Jan 06, 2017 04:49
    —
Flasher, в папках. Мы присваиваем для FileName имена папок в текущем каталоге, правильно?
Внутри этих папок существуют другие файлы и папки. Это также, как мы выводили количество файлов в этих папках, но теперь, вместо количества,
нам необходимо вывести имя (имена) папок (файлов) внутри каждого FileName

#235:  Author: FlasherLocation: Москва PostPosted: Fri Jan 06, 2017 04:53
    —
Parazit
Файлов в каталоге 200 тыс. Строка одна и ограничена по длине, всё не уместится. Я спрашиваю про вид (сортировка, разделители, ограничение). Как это должно выглядеть?

#236:  Author: ParazitLocation: Россия PostPosted: Fri Jan 06, 2017 17:23
    —
Просто вывести имя первого файла.

Last edited by Parazit on Sat Jan 07, 2017 03:44; edited 1 time in total

#237:  Author: FlasherLocation: Москва PostPosted: Fri Jan 06, 2017 22:48
    —
Code:
If CreateObject("Scripting.FileSystemObject").FolderExists(FileName) Then
  With CreateObject("Shell.Application").NameSpace(FileName).Items
    .Filter 73952, "*" : If .Count Then Content = .Item(0)
  End With
End If

P.S.: Точки в конце текста, наконец, будем ставить?

#238:  Author: ParazitLocation: Россия PostPosted: Sat Jan 07, 2017 03:45
    —
Flasher, спасибо, это то, что нужно.



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