Запуск выделенных файлов ассоциированной программой
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Запуск выделенных файлов ассоциированной программой Author: Andrey_ALocation: Сочи PostPosted: Wed Oct 06, 2010 02:31
    —
Недавно подчищал тотал и обнаружил десяток кнопок, которые запускали выделенные файлы для различных программ, и решил их объединить в одну. Скрипт работает для тех программ, которые поддерживают открытие нескольких файлов одновременно... есть наверно нюансы (для тех программ, которых у меня нет), но двухнедельная работа со скриптом оставила у меня положительные эмоции. Любые доработки приветствуются.
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:
Полагаю, что более подходящим подфорумом для этого скриптового решения является (вместо "Секретов и советов") "Автоматизация".

#2:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Oct 06, 2010 10:35
    —
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

#3:  Author: Samwatas PostPosted: Wed Oct 06, 2010 12:41
    —
А что, vbs с табуляторами не работает? По моему удобнее отступы делать табом.

#4:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Oct 06, 2010 12:59
    —
Samwatas
Всё прекрасно работает. Это уже вопрос не к языку, а к текстовому редактору. Я при настройке текстового редактора сразу устанавливаю замену Tab двумя пробелами - лично мне так удобнее.

#5:  Author: AvadaLocation: Россия, Саратов PostPosted: Fri Mar 23, 2012 07:11
    —
Последующий оффтоп удалён. Участнику navicapic выносится замечание за нарушение правил форума. Подробности — в ЛС.

#6:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Feb 11, 2013 14:34
    —
Оффтопное сообщение участника Drrean тоже удалено. Замечание за нарушение правил форума. Комментарии — в ЛС.



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