View previous topic :: View next topic |
Author |
Message |
Andrey_A

Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Thu Sep 09, 2010 12:28 Post subject: Создание ярлыков выделенных файлов ассоциированн. программой |
|
|
Столкнулся с такой проблемой
Заметил, что создавая ярлыки для некоторых файлов обычными способами, они на рабочем столе и в проводнике просто не работают, потому что в системе эти файлы не ассоциированы
Давно пользуюсь написанным для этого скриптом (я его немного уменьшил) Code: | '======================================================================
' Создание ярлыков выделенных файлов ассоциированной программой
' Параметры: {файл-список} {целевая папка}
' Пример параметров вызова из TC: %L "%T"
' Автор Andrey_A
'======================================================================
Option Explicit
Dim FSO, TCS, ListFile, SelFile, Path, TPath, i, k, m, n, sym, Ext, Dir, Name, Argument, WD, Icon, link, Shell
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Shell = CreateObject("WScript.Shell")
Set TCS = CreateObject("TCSCRIPT.Helper")
Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
TPath = WScript.Arguments(1)
Do While Not ListFile.AtEndOfStream
SelFile = ListFile.ReadLine
Argument = """" & SelFile & """"
Dir = SelFile
WD = ""
Icon = Dir & ",0"
' Извлекаем расширение
For k = 0 To Len(SelFile)
sym = Mid(SelFile,Len(SelFile) - k,1)
If sym = "." Then
m = Len(SelFile) - k + 1
k = Len(SelFile)
end if
Next
Ext = ""
For i = m To Len(SelFile)
Ext = Ext & Mid(SelFile,i,1)
Next
' Извлекаем имя
For k = 0 To Len(SelFile)
sym = Mid(SelFile,Len(SelFile) - k,1)
If sym = "\" Then
n = Len(SelFile) - k + 1
k = Len(SelFile)
end if
Next
Name = ""
For i = n To m - 2
Name = Name & Mid(SelFile,i,1)
Next
If Ext = "djvu" or Ext = "Djvu" or Ext = "DJVU" or Ext = "djv" or Ext = "Djv" or Ext = "DJV" Then
Dir = "%COMMANDER_PATH%\Programs\Text\WinDjView\WinDjView.exe"
WD = "%COMMANDER_PATH%\Programs\Text\WinDjView\"
Icon = "%COMMANDER_PATH%\Wcmicons.dll,736"
Name = "Книга " & Name
End If
If Ext = "CHm" or Ext = "Chm" or Ext = "chm" or Ext = "CHM" Then
Dir = "%COMMANDER_PATH%\Utilities\Systems\WinHlp\hh.exe"
WD = "%COMMANDER_PATH%\Utilities\Systems\WinHlp\"
Icon = "%COMMANDER_PATH%\Wcmicons.dll,590"
Name = "Справка " & Name
End If
If Ext = "Pdf" or Ext = "PDF" or Ext = "PdF" or Ext = "PDf" or Ext = "pDf" or Ext = "pdF" or Ext = "pDF" or Ext = "pdf" Then
Dir = "%COMMANDER_PATH%\Programs\Text\Foxit_Reader\Foxit Reader.exe"
WD = "%COMMANDER_PATH%\Programs\Text\Foxit_Reader\"
Icon = "%COMMANDER_PATH%\Wcmicons.dll,1823"
End If
' Создаём ярлык
Set link = Shell.CreateShortcut(TPath & "\" & Name &".lnk")
link.Arguments = Argument
link.Description = Argument
link.IconLocation = Icon
link.TargetPath = Dir
link.WindowStyle = 1
link.WorkingDirectory = WD
link.Save
Loop
ListFile.Close
Set ListFile = Nothing
Set FSO = Nothing
WScript.Quit |
Тут есть несколько моментов с которыми сам не справлюсь и поэтому хотел попросить помощи у профессионалов
1. Подправить скрипт... (есть ли функция где Ext читался без регистра, просто длинно получается - я встречал файлы где расширения были CHM, chm, Chm и даже cHm - и так со всеми различными расширениями файлов)
2. В скрипте есть блок для определённого типа файлов (к примеру) Code: | If Ext = "CHm" or Ext = "Chm" or Ext = "chm" or Ext = "CHM" Then
Dir = "%COMMANDER_PATH%\Utilities\Systems\WinHlp\hh.exe"
WD = "%COMMANDER_PATH%\Utilities\Systems\WinHlp\"
Icon = "%COMMANDER_PATH%\Wcmicons.dll,590"
Name = "Справка " & Name
End If |
Можно ли попробовать создать другой скрипт, который бы сканировал секцию [Associations] и, находя расширения, брал информацию и вставлял бы блок для каждого из них в этот скрипт. Тем самым получился бы скрипт, создающий ярлыки открывающие файл нужной нам программой. Я думаю, что это пригодится не только мне
Спасибо заранее за понимание |
|
Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2224 Location: Москва, Россия
|
(Separately) Posted: Thu Sep 09, 2010 14:19 Post subject: |
|
|
1. Andrey_A wrote: | If Ext = "CHm" or Ext = "Chm" or Ext = "chm" or Ext = "CHM" Then |
Code: | If UCase(Ext) = "CHM" Then |
2. А зачем париться с реестром? Если уже ассоциировано, то и запустится ассоциированное приложение при запуске файла. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
 |
Andrey_A

Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Thu Sep 09, 2010 15:05 Post subject: |
|
|
Batya спасибо за совет с UCase(Ext) , а что касается реестра, я про него ничего не говорил, более того у меня реестр почти пуст - т.е. ни один файл не ассоциирован, говоря о [Associations] , я имел ввиду секцию в wincmd.ini . Ещё раз пример: под курсором файл ...avi , нажимаю ctrl+Shift+F5 - создаётся ярлык, который открывается каким-то плеером
Code: | Target: E:\Фильмы\Cherepa\Cherepa_1.avi
Arguments:
Working folder: E:\Фильмы\Cherepa
Shortcut key: No
Window: Normal
Comments: E:\Фильмы\Cherepa\Cherepa_1.avi
Path to icon: Not specified |
а мне надо "моим" плеером Code: | Target: C:\Total Commander Image\Programs\Players\VLC\Vlc.exe
Arguments: "E:\Фильмы\Cherepa\Cherepa_1.avi"
Working folder: %COMMANDER_PATH%\Programs\Players\VLC\
Shortcut key: No
Window: Normal
Comments: "E:\Фильмы\Cherepa\Cherepa_1.avi"
Path to icon: %COMMANDER_PATH%\Wcmicons.dll
icon number: 576 |
и никакого реестра |
|
Back to top |
|
 |
Lev

Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Thu Sep 09, 2010 15:29 Post subject: |
|
|
[off]Посмотри ext.vbs от Script Content Plugin и объедини If'ы в Case по образцу. Чем больше вероятность встречи данного расширения в твоей работе тем раньше его проверяешь.
Это примерно равнозначно вставке в твои If'ы GoTo на конец блока If'ов, чтобы уже не проверять расширения если оно уже определилось и обработано[/off] |
|
Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2224 Location: Москва, Россия
|
(Separately) Posted: Thu Sep 09, 2010 16:24 Post subject: |
|
|
Andrey_A wrote: | говоря о [Associations] , я имел ввиду секцию в wincmd.ini |
Ааа... Опять тороплюсь.
Наверное, можно. Только я в ближайшее время за это браться не буду точно. Со временем очень сложно.
Кстати, ещё совет - для определения расширения и имени файла без расширения лучше использовать соответствующие методы объекта FSO:
Code: | FSO.GetBaseName(path)
FSO.GetExtensionName(path) |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
 |
Andrey_A

Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Wed Oct 06, 2010 02:09 Post subject: |
|
|
Обложился различными справками по скриптам и решил задачу самостоятельно, пользуюсь уже неделю, вроде бы всё работает...
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 |
Может кому-то тоже пригодится |
|
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
|