Windows 7 / NTFS及更高版本同时具有符号链接和联结,它们略有不同。 (参见this优秀帖子)。为了记录(和调试)目的,我需要能够解析远程文件服务器上的联结目标。关于此主题已有一些posts,但它们适用于在本地计算机看到它时解析联结。
在\\FileServer
上,我们有一个共享为G:\Shared
的目录PublicShare
,因此它在网络上以\\FileServer\PublicShare
的形式出现。在该目录中有子目录G:\Shared\SubDir1
和G:\Shared\SubDir2
。同样在该目录中的是指向G:\Shared\Junc
或G:\Shared\SubDir1
的联盟G:\Shared\SubDir2
。 (目标可以改变。)因此,在\\FileServer
上,可以看到
\\FileServer\PublicShare\SubDir1
\\FileServer\PublicShare\SubDir2
\\FileServer\PublicShare\Junc
在装有\\FileServer\PublicShare
的客户端计算机上(在Windows术语中映射为M:\
),可以看到M:\SubDir1
,M:\SubDir2
,M:\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可以调用??? 谢谢。
答案 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 in
和res=%%i