Переход по указанному в буфере обмена пути или ключу реестра

Материал из TCKB 2.0
Версия от 18:59, 2 января 2020; Flasher (обсуждение | вклад) (Новая страница: «{{Вопрос|1=Задача в необходимости перехода к файлу, папке или ключу реестра, указанному в...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск
Q: Задача в необходимости перехода к файлу, папке или ключу реестра, указанному в буфере обмена по полному пути.

Могут быть указаны лишние концевые пробелы, кавычки, квадратные скобки.

Разделителем в путевой цепи может быть прямой или обратный слэш, в т. ч. с лишними пробелами.
A: VBS-скрипт (описание работы в шапке):
'======================================== VBS ========================================
' Перейти к объекту в активной панели ТС по указанному в буфере пути или ключу реестра
' Условие: указать %$SystemX86%\wscript.exe перед путём к скрипту
' Параметр: "<название плагина реестра в панели Сеть/FS-плагины>"
'================================================================ Автор: Flasher © ===
Option Explicit: Dim FSO, C
Set FSO = CreateObject("Scripting.FileSystemObject")
With GetObject("New:1C3B4210-F441-11CE-B9EA-00AA006B1A69)")
  .GetFromClipboard : On Error Resume Next : C = Trim(Replace(.GetText, """", ""))
End With
If Err.Number = 0 Then On Error Goto 0 Else Quit 1
C = Replace(Replace(C, " \ ", "\"), " / ", "/")
If Left(C, 2) = "[H" Then C = Mid(C, 2)
If Right(C,1) =  "]" Then C = Left(C, Len(C) - 1)
With CreateObject("WScript.Shell")
  If InStr("|HK|HC|", "|" & Left(C, 2) & "|") Then
    C = FSO.BuildPath(Replace(C, "/", "\"), "\")
    Select Case Left(C, InStr(C, "\") - 1)
      Case "HKCU" C = "HKEY_CURRENT_USER"   & Mid(C, 5)
      Case "HKLM" C = "HKEY_LOCAL_MACHINE"  & Mid(C, 5)
      Case "HKCR" C = "HKEY_CLASSES_ROOT"   & Mid(C, 5)
      Case "HKCC" C = "HKEY_CURRENT_CONFIG" & Mid(C, 5)
      Case "HCU"  C = "HKEY_USERS" & Mid(C, 4)
    End Select : On Error Resume Next : .RegRead(C)
    Do Until Err.Number = 0
      On Error Goto 0
      If InStr(C, "\") = Len(C) Then Exit Do
      C = FSO.GetParentFolderName(C) & "\"
      On Error Resume Next : .RegRead(C)
    Loop : C = "\\\" & WSH.Arguments(0) & "\" & C
  Else   : C = .ExpandEnvironmentStrings(C)
    If FSO.FileExists(FSO.GetAbsolutePathName(C)) Then
      C = FSO.BuildPath(FSO.GetAbsolutePathName(C), "\:")
    Else If Left(C, 1) = "{" Then C = "::" & C
      If CreateObject("Shell.Application").NameSpace(C) Is Nothing Then Quit 1
    End If
  End If : .Run """%COMMANDER_EXE%"" /A /S /O """ & C & """"
  Quit 0
End With

Sub Quit(T)
  If T Then MsgBox "Содержимое буфера обмена не эквивалентно" & vbCr &_
  "существующему пути в системе или реестре !", 4144, " Переход по пути в панели ТС"
  Set FSO = Nothing : WSH.Quit
End Sub

Flasher
02.01.2020