'======================== Описание =====================================
' Запуск ВЫДЕЛЕННЫХ файлов в Программе , ассоциированной в Total Commander
'
' В параметрах вызова из TC должно быть прописанo ПЯТЬ параметров:
' {Файл Список} {Файл\Секция Ассоциаций} {Параметр вызова Окна Программы 1|2|3} {Параметр добавления файлов True|False} {Приостановка между вызовом файлов в милисекундах}
'
' ============== Параметр №1 {Файл Список} =====================================
'
' Должно быть прописано %L либо Путь\к_файл_списку_открываемых_файлов.txt
'
' ============== Параметр №2 {Файл\Секция Ассоциаций} ============================
'
' Ассоциации прописаны в секции [Associations]
' Для корректной работы секцию рекомендуется вынести из файла Wincmd.ini , прописав в нём
' [Associations]
' RedirectSection=WinAssociations.ini
'
' Можно составить СВОЙ ФАЙЛ АССОЦИАЦИЙ, вне файла Wincmd.ini где синтаксис будет таким же как и в секции {Associations} (без строки значков)
'
' Filter1=*.TXT;*.inc;
' Filter1_open=""%COMMANDER_PATH%\Plugins\exe\AkelPad\AkelPad.exe" "%1""
' Filter2=*.JPG;*.bmp;
' Filter2_open=""%COMMANDER_PATH%\Plugins\wlx\Imagine\Imagine.exe" "%1""
'
' Важно!!! После расширения, даже если оно одно добавлять {;} (точку с запятой) т.е. Filter1=*.TXT;
'
'============== Параметр №3 {Параметр вызова Окна Программы 1|2|3 } ===============================
'
' 1 - Активизирует и отображает окно.
' 2 - Активизирует окно и отображает его в свёрнутом виде.
' 3 - Активизирует окно и отображает его в максимизированном виде.
'
'============== Параметр №4 {Параметр добавления файлов True|False } ===============================
'
' True - сценарий возобновит работу только после завершения вызванного процесса. (файлы открываются ПО ОЧЕРЕДИ)
' False - управление передаётся сразу обратно в сценарий. (файлы открываются, не дожидаясь открытия предыдущего)
'
'============== Параметр №5 {Приостановка между вызовом файлов в милисекундах} =====================
'
' При быстром открывании большого к-ва файлов некоторые не открываются, поэтому с этим параметром надо поиграть
'
'============== Дополнение ================================================================
'
' Если программа открывается долго, то при первом посылании нескольких файлов откроется только один
' При повторном посылании открываются все. Поэтому желательно открыть саму программу заранее
' Или сначала послать один файл, затем выделить и добавить остальные
' Скрипт открывает не только файлы одного типа.
' Всё что выделено - всё откроется в соответствующих программах, прописанных в файле\секции Ассоциаций
'
'============== Примеры ===================================================================
'
' %L "%%COMMANDER_PATH%%\WinAssociations.ini" 1 "False" 100
' %L "%%COMMANDER_PATH%%\Wincmd.ini" 2 "False" 200
' %L "%%COMMANDER_PATH%%\UserAssociations_1.txt" 1 "True" 0
' "%%COMMANDER_PATH%%\ListFiles.txt" "%%COMMANDER_PATH%%\UserAssociations_2.txt" 3 "False" 300
'
' Автор: Аверин Андрей 2010
' Версия: 1.5
'
'================================================================================
Option Explicit
Dim FSO, WSH, ListFile, FF, F, Program, Param, Ext, Ass, ListAss, Stroka, Okno, FileRun, Sec, i, m
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
If WScript.Arguments.Count < 5 Then
MsgBox "Неправильно указано количество параметров!" & vbNewLine & "Должно быть ПЯТЬ параметров!" & vbNewLine & "A у Вас прописано " & WScript.Arguments.Count & " !!! " , vbOKOnly & vbCritical
Wscript.Quit
End If
FF = WScript.Arguments(0)
FF = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(FF))
Okno = WScript.Arguments(2)
FileRun = WScript.Arguments(3)
Sec = WScript.Arguments(4)
Set ListFile = FSO.OpenTextFile(FF, 1)
Do While Not ListFile.AtEndOfStream
Param = ListFile.ReadLine
Ext = FSO.GetExtensionName(Param) ' Извлекаем расширение файла
Ext = UCase("*." & Ext & ";") ' Готовим строку для поиска в ассоциациях
Ass = WScript.Arguments(1)
Ass = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(Ass))
ListAss = Split(FSO.OpenTextFile(Ass).ReadAll, vbNewLine)
i = 0
m = 0
For Each F In ListAss
If F <> "" Then
If InStr(1,ListAss(i),"|") > 1 Then
Stroka = UCase(Left(ListAss(i), InStr(1,ListAss(i),"|")))
Else
Stroka = UCase(ListAss(i))
End If
if m = 0 Then
if InStr(1,Stroka,Ext) > 1 Then ' Ищем номер строки и затем ассоциированную программу
Program = Mid(ListAss(i+1), InStr(1, ListAss(i + 1), chr(34)) + 2 , Len(ListAss(i+1)) - InStr(1, ListAss(i + 1), chr(34)) - 8)
m = 1
End if
End if
i = i + 1
End If
Next
Program = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(Program))
Param = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(Param))
WSH.Run chr(34) & Program & chr(34) & " " & chr(34) & Param & chr(34) ,Okno , FileRun
WScript.Sleep Sec
Loop
Set FSO = Nothing
WScript.Quit |