5

我正在编写一个批处理文件 (.bat),但我找不到一种方法来发现我有路径的给定目录是真实目录还是 Junction(在 Windows 7 上使用创建mklink /j)。谁能指出我正确的方向?

4

3 回答 3

12

在批处理脚本中,您可以使用以下内容:

 SET Z=&& FOR %%A IN (linkfilename) DO SET Z=%%~aA
 IF "%Z:~8,1%" == "l" GOTO :IT_A_LINK

这比调用更快DIR /AL

%%~aA获取“链接文件名”的属性,一个
9 字符的字符串,如d--------(一个目录),
或者d-------l一个目录的链接,
或者--------l一个文件的链接。

%Z:~8,1%然后只获取重解析点属性。

于 2011-03-01T10:47:36.313 回答
3

我有这个小宝石,它将列出您当前目录中的所有连接点及其目标:

for /F "delims=;" %j in ('dir /al /b') do @for /F "delims=[] tokens=2" %t in ('dir /a ^| findstr /C:"%j"') do @echo %j :: %t

示例输出:

Application Data :: C:\Users\AB029076\AppData\Roaming
Cookies :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Cookies
Local Settings :: C:\Users\AB029076\AppData\Local
My Documents :: C:\Users\AB029076\Documents
NetHood :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Network Shortcuts
PrintHood :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
Recent :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Recent
SendTo :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\SendTo
Start Menu :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Start Menu
Templates :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Templates
TestLink :: C:\Users\AB029076\AppData\Roaming\Microsoft\Windows\Network Shortcuts
于 2014-06-05T14:53:23.033 回答
0

这是一种糟糕的技术,但是如果文件不是一个连接,文件的fsutil reparsepoint query 路径将失败(将为 1),如果它是一个则成功(将为 0)。另一个问题是希望您成为管理员。此外,并非所有重解析点都是目录连接。%ERRORLEVEL%%ERRORLEVEL%fsutil

于 2011-01-30T19:53:45.203 回答