6

我正在尝试检查 Windows 上的路径符号链接硬链接或连接点我该怎么做?os.path.islink()不行。它总是返回False 我通过下一个方法创建符号链接:

mklink /d linkPath targetDir
mklink /h linkPath targetDir    
mklink /j linkPath targetDir

我使用命令行是因为 os.link 和 os.symlink 仅在 Unix 系统上可用

也许有任何命令行工具?谢谢

4

3 回答 3

2

os.path.islink()文档字符串指出:

Test for symbolic link.
On WindowsNT/95 and OS/2 always returns false

在 Windows 中,文件和文件夹的链接以 , 结尾.lnk,因此您可以创建一个添加此扩展名并使用 and 检查的函数os.path.isfile()os.path.isfolder()例如:

mylink = lambda path: os.path.isfile(path + '.lnk') or  os.path.isdir(path + '.lnk')
于 2013-06-18T17:00:59.253 回答
1

这适用于使用 NTFS 文件系统的 Windows 8.1 上的 Python 3.3。

islink() 为符号链接(使用 mklink 创建)返回 True,为普通文件返回 False。

于 2013-12-11T05:55:47.133 回答
0

取自https://eklausmeier.wordpress.com/2015/10/27/working-with-windows-junctions-in-python/
(另请参阅:实现 readlink() 函数时遇到问题

from ctypes import WinDLL, WinError
from ctypes.wintypes import DWORD, LPCWSTR

kernel32 = WinDLL('kernel32')

GetFileAttributesW = kernel32.GetFileAttributesW
GetFileAttributesW.restype = DWORD
GetFileAttributesW.argtypes = (LPCWSTR,) #lpFileName In

INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF
FILE_ATTRIBUTE_REPARSE_POINT = 0x00400

def islink(path):
    result = GetFileAttributesW(path)
    if result == INVALID_FILE_ATTRIBUTES:
        raise WinError()
    return bool(result & FILE_ATTRIBUTE_REPARSE_POINT)

if __name__ == '__main__':
    path = "C:\\Programme" # "C:\\Program Files" on a German Windows.
    b = islink(path)
    print path, 'is link:', b
于 2019-04-11T11:42:25.670 回答