【问题标题】:How to get target path of a junction?如何获取路口的目标路径?
【发布时间】:2015-06-03 15:52:56
【问题描述】:

我有一个文件夹C:\the Junction\test,其实是一个路口,真正的路径(目标)是D:\the real\path\to\the folder

如何在 VBScript 中找出真正的目标路径?

【问题讨论】:

    标签: vbscript junction


    【解决方案1】:

    我不知道使用普通 VBScript 获取此信息的方法,但您可以发送至 fsutil 以提取此信息:

    foldername = "C:\the Junction\test"
    
    Set sh = CreateObject("WScript.Shell")
    Set fsutil = sh.Exec("fsutil reparsepoint query """ & foldername & """")
    
    Do While fsutil.Status = 0
      WScript.Sleep 100
    Loop
    
    If fsutil.ExitCode <> 0 Then
      WScript.Echo "An error occurred (" & fsutil.ExitCode & ")."
      WScript.Quit fsutil.ExitCode
    End If
    
    Set re = New RegExp
    re.Pattern = "Substitute Name:\s+(.*)"
    
    For Each m In re.Execute(fsutil.StdOut.ReadAll)
      targetPath = m.SubMatches(0)
    Next
    
    WScript.Echo targetPath
    

    如果要从路径中排除前导 \??\,请将模式更改为 Substitute Name:\s+\\\?\?\\(.*)

    【讨论】:

    • 谢谢。这个按承诺工作。还帮助我研究了 fsutil。
    • 谷歌搜索后,我首先阅读了 social.msdn.microsoft.com 和 visualbasicscript.com 中的答案,这个是最好的!为什么我没有先看这里? :-)
    【解决方案2】:

    试试这个代码:

    Set p = CreateObject("WScript.Shell").Exec("cmd /c @echo off & for /f ""tokens=5,6"" %a IN ('dir ""c:\the junction"" /a:d ^|find ""test""') do echo The real path of ""%a"" is %b")
    Do While p.Status = 0
      WScript.Sleep 100
    Loop
    WScript.Echo p.StdOut.ReadAll
    

    【讨论】:

    • 谢谢。像魅力一样工作。
    • 实际上,不,它没有。令牌编号已关闭(名称出现在第 4 列,而不是第 5 列),并且只要连接点或目标包含空格或目录包含名称包含子字符串 test 的其他文件夹,它就会中断。
    • 是的,我太着急了,所以我没有测试其他用例。它不起作用。
    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2014-04-09
    相关资源
    最近更新 更多