2

Windows 7/NTFS 和更高版本同时具有符号链接和联结,它们有细微的不同。(请参阅组出色的帖子)。出于记录(和调试)的目的,我需要能够解析远程文件服务器上的联结目标。有一些关于这个主题的帖子,但它们适用于解决本地机器看到的结点。

\\FileServer,我们有一个G:\Shared共享出来的目录PublicShare,所以它在网络上显示为\\FileServer\PublicShare。该目录中有子目录G:\Shared\SubDir1G:\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:\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??? 谢谢。

4

2 回答 2

1

这可以解决问题:

fsutil reparsepoint query "M:\Junc"

它似乎非常可靠。

于 2014-09-08T14:40:59.857 回答
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的M:\文件夹的子文件夹(和联结)(在这种情况下:)
  • findstr:如果您有多个交汇点并且想要解决特定的交汇点,请添加 a|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
于 2018-12-06T17:53:54.137 回答