用于确定远程连接目标的代码

时间:2014-09-06 17:17:57

标签: windows fileserver junction

Windows 7 / NTFS及更高版本同时具有符号链接和联结,它们略有不同。 (参见this优秀帖子)。为了记录(和调试)目的,我需要能够解析远程文件服务器上的联结目标。关于此主题已有一些posts,但它们适用于在本地计算机看到它时解析联结。

\\FileServer上,我们有一个共享为G:\Shared的目录PublicShare,因此它在网络上以\\FileServer\PublicShare的形式出现。在该目录中有子目录G:\Shared\SubDir1G:\Shared\SubDir2。同样在该目录中的是指向G:\Shared\JuncG:\Shared\SubDir1的联盟G:\Shared\SubDir2。 (目标可以改变。)因此,在\\FileServer上,可以看到

\\FileServer\PublicShare\SubDir1
\\FileServer\PublicShare\SubDir2
\\FileServer\PublicShare\Junc

在装有\\FileServer\PublicShare的客户端计算机上(在Windows术语中映射为M:\),可以看到M:\SubDir1M:\SubDir2M:\Junc。如果在该客户端计算机上打开控制台(cmd.exe)并执行dir M:\,则Windows会提供一个很好的列表,其中显示M:\Junc是一个联结并包含目标,结点的G:\Shared\SubDirX

M:\>dir
 Volume in drive M is XXXXXXXXX
 Volume Serial Number is XXXX-XXXX

 Directory of M:\

09/05/2014  07:30 PM    <DIR>          .
09/05/2014  07:30 PM    <DIR>          ..
09/05/2014  01:36 PM    <JUNCTION>     Junc [G:\Shared\SubDir1]
09/06/2014  12:55 PM    <DIR>          SubDir1
09/05/2014  05:15 PM    <DIR>          SubDir2
               0 File(s)              0 bytes
               3 Dir(s)  1,895,493,492,736 bytes free

M:\>

因此,客户可以清楚地看到这种交汇点的目标。 是否有人知道如何以编程方式获取此信息,例如哪个系统api可以调用??? 谢谢。

2 个答案:

答案 0 :(得分:1)

这就是诀窍:

fsutil reparsepoint query "M:\Junc"

似乎非常可靠。

答案 1 :(得分:0)

如果您不想解析C:\Windows\System32\fsutil.exe的输出,只需使用DIR

for /f "usebackq delims=[] tokens=2" %i in ( `dir M:\^|findstr JUNCTION` ) do set RES=%i

注意:

  • M:\:您需要显示JUNCTION的 parent 文件夹的子文件夹(和联结)(在本例中为M:\
  • findstr:如果您有多个路口并想解决特定的路口,请添加一个|findstr foldername来分隔右行,
  • delims=[]:将输出09/05/2014 01:36 PM <JUNCTION> Junc [G:\Shared\SubDir1]分成3个令牌:
    • 09/05/2014 01:36 PM <JUNCTION> Junc
    • G:\Shared\SubDir1
    • <empty>
  • tokens=2:仅关注第二个令牌(“ G:\Shared\SubDir1”)
  • %i:如果您在.bat脚本中运行该命令,则将'%'翻倍:%%i inres=%%i