View previous topic :: View next topic |
Author |
Message |
Andrey_A
Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Wed Oct 06, 2010 02:31 Post subject: Запуск выделенных файлов ассоциированной программой |
|
|
Недавно подчищал тотал и обнаружил десяток кнопок, которые запускали выделенные файлы для различных программ, и решил их объединить в одну. Скрипт работает для тех программ, которые поддерживают открытие нескольких файлов одновременно... есть наверно нюансы (для тех программ, которых у меня нет), но двухнедельная работа со скриптом оставила у меня положительные эмоции. Любые доработки приветствуются.
Code: | '======================== Описание =====================================
' Запуск ВЫДЕЛЕННЫХ файлов в Программе , ассоциированной в 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 |
! | Avada: | Полагаю, что более подходящим подфорумом для этого скриптового решения является (вместо "Секретов и советов") "Автоматизация". | |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Oct 06, 2010 10:35 Post subject: |
|
|
Andrey_A
Пока твой скрипт не планирую использовать, но хочу дать несколько конструктивных советов по написанию скриптов.
- Часто используемые конструкции лучше выносить в функции, например: "FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings())"
- Форматирование текста кода у тебя есть (это гуд!), но какое-то местами неровное. Например, кусок Code: | 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 | я бы записал Code: | ' Готовим строку для поиска в ассоциациях
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 |
- Также сразу для себя определись с размером отступа для вложенных конструкций. Чаще всего используют либо 2, либо 4 пробела.
- Строки лучше не делать очень длинными - код при этом плохо читается. В vbs строки можно разбивать на части, указав в конце строки символ "_". Например: Code: | MsgBox "Неправильно указано количество параметров!" & vbNewLine &_
"Должно быть ПЯТЬ параметров!" & vbNewLine &_
"A у Вас прописано " & WScript.Arguments.Count & " !!! ", _
vbOKOnly + vbCritical |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Samwatas
Joined: 12 Sep 2009 Posts: 95
|
(Separately) Posted: Wed Oct 06, 2010 12:41 Post subject: |
|
|
А что, vbs с табуляторами не работает? По моему удобнее отступы делать табом. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Oct 06, 2010 12:59 Post subject: |
|
|
Samwatas
Всё прекрасно работает. Это уже вопрос не к языку, а к текстовому редактору. Я при настройке текстового редактора сразу устанавливаю замену Tab двумя пробелами - лично мне так удобнее. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10263 Location: Россия, Саратов
|
(Separately) Posted: Fri Mar 23, 2012 07:11 Post subject: |
|
|
Последующий оффтоп удалён. Участнику navicapic выносится замечание за нарушение правил форума. Подробности — в ЛС. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10263 Location: Россия, Саратов
|
(Separately) Posted: Mon Feb 11, 2013 14:34 Post subject: |
|
|
Оффтопное сообщение участника Drrean тоже удалено. Замечание за нарушение правил форума. Комментарии — в ЛС. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|