View previous topic :: View next topic |
Author |
Message |
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sat Nov 12, 2011 00:11 Post subject: Массовое создание ярлыков LNK с относительными путями |
|
|
Уважаемые!
Есть папки, которые надо делать портабл без привязки к пути, и там иногда требуется создавать много .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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 12, 2011 02:04 Post subject: |
|
|
Не знаю, кому это тут пригодится. Есть виртуальные панели, есть переменные окружения. Всё проще и удобней.
Ярлыки для Проводника, Рабочего стола и т.п., но не для ТС, 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 |
|
|
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sat Nov 12, 2011 09:15 Post subject: |
|
|
Flasher
Quote: | надо понимать, что файлы, на которые вешаются эти ярлыки, должны лежать в структуре тех каталогов, в которых находятся сами ярлыки. Поэтому абы где их помещать не выйдет. |
Дык это я и писал, что ".\......" Под первой точкой это и лежит сам lnk.
Внутри этой папки, естественно, lnk должны лежать на определенном месте, иначе не будут работать.
А смысл сей затеи в том, что , допустим у вас есть папка со своей структурой, ярлыками... Так вот, решили вы записать ее на диск, на флэшку, перенести на другой комп, и мало-ли там она не будет на том-же реальном/виртуальном диске. Всё. Ярлыки работать не будут.
И тут никакие виртуальные панели, переменные окружения не выход.
Я ведь писал, что это для портабелизации. С абсолютными ярлыками такой фокус неудастся |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 12, 2011 09:29 Post subject: |
|
|
JKT wrote: | И тут никакие виртуальные панели, переменные окружения не выход. | Это почему? Это не то что выход, это лучше, потому как не надо думать какую ветвь указывать. А тут пляски вокруг ярлыка...
Ах, да - "не за что"... |
|
Back to top |
|
|
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sat Nov 12, 2011 10:38 Post subject: |
|
|
Quote: | Ах, да - "не за что"... |
Спасибо за внимание! конечно. Но...
Предполагается, что сия папка будет юзаться на любом компе, где и тотала нету, никаких виртуалов. А так средствами самой винды. Проверено, все работает, и тут просто как-бы автоматизировать. "Вот в чем вопрос" (с) |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 12, 2011 10:43 Post subject: |
|
|
JKT wrote: | где и тотала нету | Тогда не очень понятна причина прихода с этой проблемой на форум по ТС.
JKT wrote: | Проверено, все работает, и тут просто как-бы автоматизировать. "Вот в чем вопрос" | |
|
Back to top |
|
|
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sat Nov 12, 2011 10:56 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 12, 2011 10:59 Post subject: |
|
|
JKT wrote: | А потомукак средствами тотала сие сделать. | При чём тут средства Тотала, если речь идёт об использовании вне Тотала?
И что есть "сие"? Создание ярлыков? Или альтернативные способы?
Last edited by Flasher on Sat Nov 12, 2011 11:01; edited 1 time in total |
|
Back to top |
|
|
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sat Nov 12, 2011 11:01 Post subject: |
|
|
Quote: | Причём тут средства Тотала |
Я делаю на своем компе средствами тотала, а папка будет использоваться на компе где тотала нет. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 12, 2011 11:06 Post subject: |
|
|
Это равносильно "Я запускаю программу из ТС, поэтому я её тут обсуждаю." Ладно, задемагогились. По выделенному лучше отпишись. |
|
Back to top |
|
|
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sat Nov 12, 2011 11:11 Post subject: |
|
|
Flasher
ЛС
Добавлено спустя 1 час 7 минут:
дубль:
Есть (средствами тотала):
Надо:
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 12, 2011 12:40 Post subject: |
|
|
JKT
Было понятно. Ошибся кое в чём. Подправил.
Стоп, не понял. Ярлыки что ли надо переделывать? Было же чётко написано: JKT wrote: | Выделяем все файлы, которым хотим ярлыки создать в одной панели, в другой панели открываем куда они должны ложиться, потом скрипт создания с относительными путями (ну по примеру). Все. |
|
|
Back to top |
|
|
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sat Nov 12, 2011 13:08 Post subject: |
|
|
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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 12, 2011 13:09 Post subject: |
|
|
Так исправлять существующие или создавать новые? Сперва одно пишешь, а потом "есть ярлыки - надо такие". |
|
Back to top |
|
|
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sat Nov 12, 2011 13:14 Post subject: |
|
|
Flasher
Конечно Создавать. Сори, если че нетак сформулировал
Хотя вроде говорил в первом посту
Quote: | Да и лучше сразу сделать, чем потом редактить |
А то Есть и Надо, то для примера
Last edited by JKT on Sat Nov 12, 2011 13:17; edited 1 time in total |
|
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
|