Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Создание ярлыков выделенных файлов ассоциированн. программой 
Author Message
Andrey_A



PostPosted: Wed Oct 06, 2010 02:09    Post subject: Reply with quote

Обложился различными справками по скриптам и решил задачу самостоятельно, пользуюсь уже неделю, вроде бы всё работает...
Code:
'=====================================================================================
' Создание ярлыков ВЫДЕЛЕННЫХ файлов, связанных с Программой , ассоциированной в Total Commander
 '
' В параметрах вызова из TC должно быть прописанo ТРИ параметра:
' {Файл Список} {Файл\Секция Ассоциаций} {Путь сохранения ярлыка}
'
' ============== Параметр №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  {Путь сохранения ярлыка } ===============================
'
'             Должно быть прописано "%T" либо "%P" либо "Путь\сохранения\ярлыка\"

'============== Примеры ===================================================================
'
'  %L "%%COMMANDER_PATH%%\WinAssociations.ini" "%T"
'  %L "%%COMMANDER_PATH%%\Wincmd.ini" "%P"
'  %L "%%COMMANDER_PATH%%\UserAssociations_1.txt" "%APPDATA%\Microsoft\Internet Explorer\Quick Launch"
' "%%COMMANDER_PATH%%\ListFiles.txt" "%%COMMANDER_PATH%%\UserAssociations_2.txt" "%%HOMEPATH%%\Desktop\"
'
' Автор:             Аверин Андрей (28.09.2010)
' Версия:          1.6
'======================================================================
Option Explicit
Dim FSO, ListFile, SelFile, TPath, Ass, ListAss, Stroka, Target, F, i, m, Ext, ExtAss, Name, Arguments, WorkingFolder, Icon, link, Shell, TPathN,Description
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("WScript.Shell")

Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
TPath  = WScript.Arguments(2)
TPath = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(TPath))

Do While Not ListFile.AtEndOfStream
     SelFile = ListFile.ReadLine
 
Name = FSO.GetBaseName(SelFile)
Ext = FSO.GetExtensionName(SelFile)                           ' Извлекаем расширение файла
ExtAss = UCase("*." & Ext & ";")                                      ' Готовим строку для поиска в ассоциациях

TPathN = TPath & "\" & Name & "." & Ext & ".lnk" ' Параметры ярлыка по умолчанию
Arguments =  ""
Target = SelFile
Icon = Target & ",0"
    
           If FSO.FolderExists(SelFile) Then                          ' Если выделена папка
           Target = SelFile
           Icon = ",0"
           TPathN = TPath & "\" & Name & "." & "lnk"
           Description = SelFile
           End if

       Ass = WScript.Arguments(1)
      Ass = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(Ass))
      ListAss =  Split(FSO.OpenTextFile(Ass).ReadAll, vbNewLine)
         i = 0
         m = 0
     For Each F In ListAss
              
   If F <> "" or Ext <> "" 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,ExtAss) > 1 Then  ' Ищем номер строки и затем ассоциированную программу
              if InStr(1,UCase(ListAss(i+1)),"OPEN") > 1 Then
                 Target = Mid(ListAss(i+1), InStr(1, ListAss(i + 1), chr(34)) + 2 , Len(ListAss(i+1)) - InStr(1, ListAss(i + 1), chr(34)) - 8)
                 TPathN = TPath & "\" & Name & "." & Ext & ".lnk"
                  Description = SelFile
                  Arguments = Chr(34) & SelFile & Chr(34)
                    If InStr(1,UCase(ListAss(i+2)),"ICON") > 1 Then
                         Icon = Mid(ListAss(i+2), InStr(1, ListAss(i + 2), "=") + 1 , Len(ListAss(i+2)) - InStr(1, ListAss(i + 2), "="))
                    End If
              End if
             m = 1
          End if
       End if
       i = i + 1
   End If
    Next

WorkingFolder = FSO.GetParentFolderName(Target)
Set link = Shell.CreateShortcut(TPathN) ' Создаём ярлык
link.Arguments = Arguments
link.Description = Description
link.IconLocation = icon
link.TargetPath = Target
link.WindowStyle = 1
link.WorkingDirectory = WorkingFolder
link.Save

Loop
   ListFile.Close
   Set ListFile = Nothing
   Set FSO = Nothing
   WScript.Quit

Может кому-то тоже пригодится
View user's profile Send private message Send e-mail Visit poster's website ICQ Number


Powered by phpBB © 2001, 2005 phpBB Group