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 

Массовое создание ярлыков LNK с относительными путями
Goto page 1, 2, 3, 4  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
JKT



Joined: 22 Sep 2009
Posts: 116
Location: Харьков

Post (Separately) Posted: Sat Nov 12, 2011 00:11    Post subject: Массовое создание ярлыков LNK с относительными путями Reply with quote

Уважаемые!
Есть папки, которые надо делать портабл без привязки к пути, и там иногда требуется создавать много .LNK ярлыков на доки, проги и т.п. Список с относительными путями (тот-же кликабельный htm) - выход, но невсегда удобен.
Нашел в инете, как в винде делать LNK не с абсолютными путями, а относительными.
Вот как выглядит (копия с окна свойств lnk по этому методу) :
-----------------------------
Файл: C:\WINDOWS\system32\rundll32.exe
Аргументы: shell32.dll,ShellExec_RunDLL ".\111\222\index.htm"
Рабочий каталог:
Горячая клавиша: Нет
Окно: Обычный размер
Описание:
Путь к иконке: Не задан
============
Т.е отэтот ".\111\222\index.htm" и есть относительный путь, а сам файл .LNK располагается допустим "start.lnk\111\222\index.htm"
Редакчу созданные ярлыки в плагине "Просмотр+редактор ярлыков", ну тот, что по F3+потом ПКМ "редактировать". Все прекрасно работает, поля заполняю как надо, но по одному. Да и лучше сразу сделать, чем потом редактить.
Вообщем.., возможно-ли сделать по сценарию: (допустим, если такие фокусы ТС разрешает). Выделяем все файлы, которым хотим ярлыки создать в одной панели, в другой панели открываем куда они должны ложиться, потом скрипт создания с относительными путями (ну по примеру). Все.
Смотрел тему http://forum.wincmd.ru/viewtopic.php?t=12701&sid=fd539618e8abed50b7a2036a92904060 , но там замена, а в этой задаче неработает.
Да. Поле "Рабочий каталог" должен в этом методе быть пустой
Надеюсь правильно обрисовал проблему. Если возникала где-то (ненашел), перенесите.
Спасибо.

Добавлено спустя 1 час 11 минут:

Идеальный вариант. По CTRL+SHIFT+F5 создаются ярлыки на выделенные файлы с абсолютными путями, а ctrl+shift+alt+F5 - с относительными. Думаю сия фича многим пригодится
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14177
Location: Москва

Post (Separately) Posted: Sat Nov 12, 2011 02:04    Post subject: Reply with quote

Не знаю, кому это тут пригодится. Есть виртуальные панели, есть переменные окружения. Всё проще и удобней.
Ярлыки для Проводника, Рабочего стола и т.п., но не для ТС, IMO.

И уж если приводить ссылки, чтобы помогали, то не на результаты поискового запроса, а туда, где было прочитано. Да и скрывать за текстом их не помешало бы.

И в данном случае надо понимать, что файлы, на которые вешаются эти ярлыки, должны лежать в структуре тех каталогов, в которых находятся сами ярлыки. Поэтому абы где их помещать не выйдет.

В 7-ке и Висте можно только через explorer.
Code:
'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Создание ярлыков (с относительными путями) для выделенных файлов,
' связанных с каталогом-получателем одной путевой цепью в дереве

' Параметры: %L "<Путь назначения>"
' Пример:    %L "%T"

' Автор - Flasher ©
'••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  File = .Item(0)
  Path = .Item(1)
End With
If Right(Path, 1) <> "\" Then Path = Path & "\"

For Each S in GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")_
.ExecQuery("Select * from Win32_OperatingSystem")
  OS = Mid(S.Caption, 19, 3)
Next
L = vbNewLine
Set FSO = CreateObject("Scripting.FileSystemObject")

For Each F in Split(FSO.OpenTextFile(File, 1).ReadAll, L)
  If F > vbNullString Then
    PF = FSO.GetParentFoldername(F)
    FN = FSO.GetFileName(F)
    NP = Left(Path, Len(PF))
    If Path = Left(F, Len(Path)) Then
      RP = "." & Mid(F, Len(Path))
    ElseIf PF = NP Then
      For i = 2 To UBound(Split(Mid(Path, Len(NP)), "\"))
        Parent = Parent & "..\"
      Next
      RP = Parent & FN
    Else
      Count W, L, FN
      Do While W = 4
        Count W, L, FN
      Loop
    End If
    If W <> 5 Then
      If InStr(RP, " ") > 0 Then RP = """" & RP & """"
      With CreateObject("WScript.Shell").CreateShortcut(Path & FN & ".lnk")
        If InStr(OS, "7") Or InStr(OS, "V") Then
          .TargetPath = "%WINDIR%\explorer.exe"
          .Arguments = RP
        Else
          .TargetPath = "%WINDIR%\system32\RunDll32.exe"
          .Arguments = "shell32.dll,ShellExec_RunDLL " & RP
        End If
        .Save
      End With
    End If
  End If
Next
Quit

Sub Count(W, N, NF)
  Ln = Len(NF)
  Sp = InStrRev(NF, " ")
  If Ln > 33 Then
    If Ln < 55 Then
      A = CInt(Ln-15)
    ElseIf Sp < 33 Then
      A = Cint(36 - Sp)
    Else A = CInt(Sp-15)
    End If
  Else
    A = 17
  End If
  B = A + 10
  W = MsgBox("Отсутствует структурная связь" & N & _
  "между получателем и файлом " & N & """" & NF & """" & N & _
  N & Space(A) & "Отклонено!", 50, Space(B) & "Создание ярлыков")
  If W = 3 Then Quit
End Sub

Sub Quit
  Set FSO = Nothing
  WScript.Quit
End Sub


Last edited by Flasher on Mon Nov 14, 2011 00:19; edited 9 times in total
Back to top
View user's profile Send private message
JKT



Joined: 22 Sep 2009
Posts: 116
Location: Харьков

Post (Separately) Posted: Sat Nov 12, 2011 09:15    Post subject: Reply with quote

Flasher
Quote:
надо понимать, что файлы, на которые вешаются эти ярлыки, должны лежать в структуре тех каталогов, в которых находятся сами ярлыки. Поэтому абы где их помещать не выйдет.

Дык это я и писал, что ".\......" Под первой точкой это и лежит сам lnk.
Внутри этой папки, естественно, lnk должны лежать на определенном месте, иначе не будут работать.
А смысл сей затеи в том, что , допустим у вас есть папка со своей структурой, ярлыками... Так вот, решили вы записать ее на диск, на флэшку, перенести на другой комп, и мало-ли там она не будет на том-же реальном/виртуальном диске. Всё. Ярлыки работать не будут.
И тут никакие виртуальные панели, переменные окружения не выход.
Я ведь писал, что это для портабелизации. С абсолютными ярлыками такой фокус неудастся
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14177
Location: Москва

Post (Separately) Posted: Sat Nov 12, 2011 09:29    Post subject: Reply with quote

JKT wrote:
И тут никакие виртуальные панели, переменные окружения не выход.
Это почему? Это не то что выход, это лучше, потому как не надо думать какую ветвь указывать. А тут пляски вокруг ярлыка...

Ах, да - "не за что"...
Back to top
View user's profile Send private message
JKT



Joined: 22 Sep 2009
Posts: 116
Location: Харьков

Post (Separately) Posted: Sat Nov 12, 2011 10:38    Post subject: Reply with quote

Quote:
Ах, да - "не за что"...

Спасибо за внимание! конечно. Но...
Предполагается, что сия папка будет юзаться на любом компе, где и тотала нету, никаких виртуалов. А так средствами самой винды. Проверено, все работает, и тут просто как-бы автоматизировать. "Вот в чем вопрос" (с)
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14177
Location: Москва

Post (Separately) Posted: Sat Nov 12, 2011 10:43    Post subject: Reply with quote

JKT wrote:
где и тотала нету
Тогда не очень понятна причина прихода с этой проблемой на форум по ТС.
JKT wrote:
Проверено, все работает, и тут просто как-бы автоматизировать. "Вот в чем вопрос"
Question
Back to top
View user's profile Send private message
JKT



Joined: 22 Sep 2009
Posts: 116
Location: Харьков

Post (Separately) Posted: Sat Nov 12, 2011 10:56    Post subject: Reply with quote

Quote:
Тогда не очень понятна причина прихода с этой проблемой на форум по ТС

А потомукак средствами тотала сие сделать. Искал по инету по "массовое редактирование ярлыков", нашел пару скриптов на программерских форумах, там тоже задавались сей задачей. Но те скрипты малость нетакие. Там чисто "найти то", "заменить на", что собсно тут на форуме и была тема от Андрей А http://forum.wincmd.ru/viewtopic.php?t=12701&sid=fd539618e8abed50b7a2036a92904060 Но и тут, скрипт от Batya недает заменить, допустим путь D:\ на .\
А врукопашную плагином редактирования ярлыка можно. работает.


Last edited by JKT on Sat Nov 12, 2011 10:59; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14177
Location: Москва

Post (Separately) Posted: Sat Nov 12, 2011 10:59    Post subject: Reply with quote

JKT wrote:
А потомукак средствами тотала сие сделать.
При чём тут средства Тотала, если речь идёт об использовании вне Тотала?
И что есть "сие"? Создание ярлыков? Или альтернативные способы?


Last edited by Flasher on Sat Nov 12, 2011 11:01; edited 1 time in total
Back to top
View user's profile Send private message
JKT



Joined: 22 Sep 2009
Posts: 116
Location: Харьков

Post (Separately) Posted: Sat Nov 12, 2011 11:01    Post subject: Reply with quote

Quote:
Причём тут средства Тотала

Я делаю на своем компе средствами тотала, а папка будет использоваться на компе где тотала нет.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14177
Location: Москва

Post (Separately) Posted: Sat Nov 12, 2011 11:06    Post subject: Reply with quote

Это равносильно "Я запускаю программу из ТС, поэтому я её тут обсуждаю." Ладно, задемагогились. По выделенному лучше отпишись.
Back to top
View user's profile Send private message
JKT



Joined: 22 Sep 2009
Posts: 116
Location: Харьков

Post (Separately) Posted: Sat Nov 12, 2011 11:11    Post subject: Reply with quote

Flasher
ЛС

Добавлено спустя 1 час 7 минут:

дубль:
Есть (средствами тотала):


Надо:
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14177
Location: Москва

Post (Separately) Posted: Sat Nov 12, 2011 12:40    Post subject: Reply with quote

JKT
Было понятно. Ошибся кое в чём. Подправил.

Стоп, не понял. Ярлыки что ли надо переделывать? Было же чётко написано:
JKT wrote:
Выделяем все файлы, которым хотим ярлыки создать в одной панели, в другой панели открываем куда они должны ложиться, потом скрипт создания с относительными путями (ну по примеру). Все.
Back to top
View user's profile Send private message
JKT



Joined: 22 Sep 2009
Posts: 116
Location: Харьков

Post (Separately) Posted: Sat Nov 12, 2011 13:08    Post subject: Reply with quote

Quote:
Ярлыки что ли надо переделывать?

Несовсем понял. Тупо в поле "файл" ярлыка вбить
C:\WINDOWS\system32\rundll32.exe
В поле Аргументы вбить shell32.dll,ShellExec_RunDLL ".\Путь файла.ext"
А путь берется из второй, неактивной панели
В активной выделяем файлы, на второй открываем путь (куда они должны ложиться и таки дела


Last edited by JKT on Sat Nov 12, 2011 13:11; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14177
Location: Москва

Post (Separately) Posted: Sat Nov 12, 2011 13:09    Post subject: Reply with quote

Так исправлять существующие или создавать новые? Сперва одно пишешь, а потом "есть ярлыки - надо такие".
Back to top
View user's profile Send private message
JKT



Joined: 22 Sep 2009
Posts: 116
Location: Харьков

Post (Separately) Posted: Sat Nov 12, 2011 13:14    Post subject: Reply with quote

Flasher
Конечно Создавать. Сори, если че нетак сформулировал
Хотя вроде говорил в первом посту
Quote:
Да и лучше сразу сделать, чем потом редактить

А то Есть и Надо, то для примера


Last edited by JKT on Sat Nov 12, 2011 13:17; edited 1 time in total
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
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