窗口路径太长



以下代码片段显示了如何在Windows中提取快捷方式的目标:

import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
fp = r'C:very_long_pathtoalinkfileshortcut.lnk'
shortcut = shell.CreateShortCut(fp)
#targetPath = "\\?\"+shortcut.Targetpath # Does not help
targetPath = shortcut.Targetpath

如果 lnk 文件位于太长的路径上,则上面的代码将失败。 在这种情况下,如何获取快捷方式的目标路径?

我相信您面临的限制在win32com.client.Dispatch("WScript.Shell")这就是为什么您面临 260 个字符的限制并且前缀带有\?并不能解决您的问题。

你将不得不通过以下方式解决它

  • 将文件夹复制到较短的路径(可以使用\?前缀进行复制,以避免路径长度的限制)
  • 然后创建快捷方式(不带\?前缀),但使用较长的路径目标。
  • 并全部复制回来(再次使用\?前缀)。

或者,您可以考虑使用符号链接代替快捷方式(Windows Vista 及更高版本),快捷方式可以使用os.symlink()创建,这将与长路径名的前缀一起使用\?。这是我个人多次做过的事情,因为它更容易实现。但是你将不得不问一个问题,如果真的需要这个"快捷方式"或"符号链接",因为一旦你有一个"符号链接",你确实需要在删除时删除两个源作为符号链接,否则你的文件将保留。

最后,您可以用困难的方式执行此操作:重新创建代码以创建正确格式的快捷方式文件。这是一些Microsoft文档,在线搜索将显示多个包含有用信息的链接。

虽然我没有这方面的经验,但似乎有一个模块声称它可以原生创建.lnk文件

最新更新