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: Массовое создание ярлыков LNK с относительными путями 
Author Message
Flasher



PostPosted: 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
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group