pywin32: 快捷方式路径名必须以 .lnk 或 .url 结尾
pywin32: The shortcut pathname must end with .lnk or .url
我有一个 python 脚本,它通过创建目录和快捷方式文件来帮助我管理各种项目的快捷方式。在过去的几个月里,我一直在使用 pywin32 和 python 10,它运行良好,但最近我遇到了一个错误,该错误似乎并不适用于我的情况,而且以前也不存在。当我注意到这一点时,我刚刚将编辑器从 VSCode 切换到 PyCharm 并进行了一些格式更改,尽管这些操作似乎都与此问题无关,尤其是因为我 运行ning通过命令提示符而不是 IDE 文件(尽管当我通过 IDE 运行 时也会发生错误)。
我的程序将生成如下所示的文件路径:
C:\Users\<User>\Desktop\Local Projects\Shortcuts\Folder\test.lnk
我每次都会收到错误消息:
File "C:\Users\<User>\OneDrive - <Organization>\Desktop\Local Projects\create new.py", line 594, in <module>
shortcut = shell.CreateShortCut(shortcut_path)
File "<COMObject WScript.Shell>", line 2, in CreateShortCut
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'WshShell.CreateShortcut', 'The
shortcut pathname must end with .lnk or .url.', None, 0, -2147352567), None)
错误信息似乎表明路径名没有以“.lnk”或“.url”结尾,但我已经确认发生此错误时变量确实以“.lnk”结尾.我已经多次尝试重新安装该软件包,但无济于事。
需要注意的是,我的桌面文件夹(“C:\Users\\Desktop”)实际上是我配置为重定向到 OneDrive 路径的连接点。之前的脚本都没有这个问题。
如错误消息所述,快捷方式路径名必须以 .lnk 或 .url 结尾。您的代码以 space 或双引号结尾。
我已经编辑了您的代码来解决这些问题,并将您的文件路径字符串设为原始字符串,这样您就不需要转义反斜杠了。
if makeShortcut:
shortcut_path = ""
if isAssignment:
shortcut_path = fr"C:\Users\User\Desktop\{shortcuts_folder}\{modified_class_name}\Assignments\{shortcut_rel_path}{project_name}.lnk"
else:
shortcut_path = fr"C:\Users\User\Desktop\{shortcuts_folder}\{modified_class_name}\{shortcut_rel_path}{project_name}.lnk"
os.makedirs(os.path.dirname(shortcut_path), exist_ok=True)
if os.path.exists(shortcut_path):
os.remove(shortcut_path)
print(shortcut_path)
shell = win32com.client.Dispatch("WScript.Shell")
shortcut = shell.CreateShortCut(shortcut_path)
if editor.lower() == "vscode":
shortcut.TargetPath = fr"C:\Users\User\AppData\Local\Programs\Microsoft VS Code\Code.exe"
elif editor.lower() == "intellij":
shortcut.TargetPath = f"idea"
# set the icon to the intellij icon
shortcut.IconLocation = fr"C:\Taskbar\Icons\idea.ico"
elif editor.lower() == "pycharm":
shortcut.TargetPath = f"pycharm"
# set the icon to the pycharm icon
shortcut.IconLocation = fr"C:\Taskbar\Icons\pycharm.ico"
shortcut.Arguments = f"{folder_path}"
shortcut.save()
if isGithub:
git_shortcut_path = fr"C:\Users\User\Desktop\Local Projects\Shortcuts\{class_name}\Github.lnk"
if os.path.exists(git_shortcut_path):
os.remove(git_shortcut_path)
git_shortcut = shell.CreateShortCut(git_shortcut_path)
git_shortcut.TargetPath = fr"C:\Users\User\Desktop\{shortcuts_folder}\{modified_class_name}"
git_shortcut.save()
我有一个 python 脚本,它通过创建目录和快捷方式文件来帮助我管理各种项目的快捷方式。在过去的几个月里,我一直在使用 pywin32 和 python 10,它运行良好,但最近我遇到了一个错误,该错误似乎并不适用于我的情况,而且以前也不存在。当我注意到这一点时,我刚刚将编辑器从 VSCode 切换到 PyCharm 并进行了一些格式更改,尽管这些操作似乎都与此问题无关,尤其是因为我 运行ning通过命令提示符而不是 IDE 文件(尽管当我通过 IDE 运行 时也会发生错误)。
我的程序将生成如下所示的文件路径:
C:\Users\<User>\Desktop\Local Projects\Shortcuts\Folder\test.lnk
我每次都会收到错误消息:
File "C:\Users\<User>\OneDrive - <Organization>\Desktop\Local Projects\create new.py", line 594, in <module>
shortcut = shell.CreateShortCut(shortcut_path)
File "<COMObject WScript.Shell>", line 2, in CreateShortCut
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'WshShell.CreateShortcut', 'The
shortcut pathname must end with .lnk or .url.', None, 0, -2147352567), None)
错误信息似乎表明路径名没有以“.lnk”或“.url”结尾,但我已经确认发生此错误时变量确实以“.lnk”结尾.我已经多次尝试重新安装该软件包,但无济于事。
需要注意的是,我的桌面文件夹(“C:\Users\\Desktop”)实际上是我配置为重定向到 OneDrive 路径的连接点。之前的脚本都没有这个问题。
如错误消息所述,快捷方式路径名必须以 .lnk 或 .url 结尾。您的代码以 space 或双引号结尾。
我已经编辑了您的代码来解决这些问题,并将您的文件路径字符串设为原始字符串,这样您就不需要转义反斜杠了。
if makeShortcut:
shortcut_path = ""
if isAssignment:
shortcut_path = fr"C:\Users\User\Desktop\{shortcuts_folder}\{modified_class_name}\Assignments\{shortcut_rel_path}{project_name}.lnk"
else:
shortcut_path = fr"C:\Users\User\Desktop\{shortcuts_folder}\{modified_class_name}\{shortcut_rel_path}{project_name}.lnk"
os.makedirs(os.path.dirname(shortcut_path), exist_ok=True)
if os.path.exists(shortcut_path):
os.remove(shortcut_path)
print(shortcut_path)
shell = win32com.client.Dispatch("WScript.Shell")
shortcut = shell.CreateShortCut(shortcut_path)
if editor.lower() == "vscode":
shortcut.TargetPath = fr"C:\Users\User\AppData\Local\Programs\Microsoft VS Code\Code.exe"
elif editor.lower() == "intellij":
shortcut.TargetPath = f"idea"
# set the icon to the intellij icon
shortcut.IconLocation = fr"C:\Taskbar\Icons\idea.ico"
elif editor.lower() == "pycharm":
shortcut.TargetPath = f"pycharm"
# set the icon to the pycharm icon
shortcut.IconLocation = fr"C:\Taskbar\Icons\pycharm.ico"
shortcut.Arguments = f"{folder_path}"
shortcut.save()
if isGithub:
git_shortcut_path = fr"C:\Users\User\Desktop\Local Projects\Shortcuts\{class_name}\Github.lnk"
if os.path.exists(git_shortcut_path):
os.remove(git_shortcut_path)
git_shortcut = shell.CreateShortCut(git_shortcut_path)
git_shortcut.TargetPath = fr"C:\Users\User\Desktop\{shortcuts_folder}\{modified_class_name}"
git_shortcut.save()