以下代码段显示了如何在Windows中提取快捷方式的目标:
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
fp = r'C:\very_long_path\to\a\link\file\shortcut.lnk'
shortcut = shell.CreateShortCut(fp)
#targetPath = "\\\\?\\"+shortcut.Targetpath # Does not help
targetPath = shortcut.Targetpath
如果lnk文件位于太长的路径上,则上述代码将失败。 在这种情况下,如何获得快捷方式的目标路径?
答案 0 :(得分:0)
我相信您所面临的限制在win32com.client.Dispatch("WScript.Shell")
范围内,这就是为什么您面临260个字符的限制,\\?\
的前缀不能解决您的问题。
你必须通过
解决这个问题\\?\
前缀进行复制,以避免限制路径长度)\\?\
前缀),但路径目标更长。\\?\
前缀)。或者,您可以考虑使用符号链接代替 Shortcut (Windows Vista和更高版本),可以使用os.symlink()
创建,这将有效长路径名称带有\\?\
前缀。这是我个人多次做过的事情,因为它实现起来更简单。但你必须问这个"快捷方式"或"符号链接"真的需要,因为一旦你有一个"符号链接"你需要在删除时删除两个源作为符号链接,否则你的文件将保留。
最后,您可以通过以下方式执行此操作:重新创建代码以正确格式创建快捷方式文件。 Here is some Microsoft Documentation,在线搜索会显示包含有用信息的多个链接。
虽然我没有这方面的经验,但似乎有module which claims it can natively create .lnk files