Windows上的符号链接

时间:2013-06-18 16:59:12

标签: python

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

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

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

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

3 个答案:

答案 0 :(得分:2)

os.path.islink() docstring声明:

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

在Windows中,链接以.lnk结尾,用于文件和文件夹,因此您可以创建添加此扩展程序的功能,并使用os.path.isfile()os.path.isfolder()进行检查,例如:

mylink = lambda path: os.path.isfile(path + '.lnk') or  os.path.isdir(path + '.lnk')

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

来自https://eklausmeier.wordpress.com/2015/10/27/working-with-windows-junctions-in-python/
(另请参见:Having trouble implementing a readlink() function

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