我有一个python脚本,通过创建目录和快捷方式文件来帮助我管理各种项目的快捷方式。在过去的几个月里,我一直在使用pywin32和python 10,它工作得很好,但最近我遇到了一个错误,似乎不适用于我的情况,以前也没有。当我注意到这一点时,我刚刚将编辑器从VSCode切换到PyCharm并进行了一些格式更改,尽管这些操作似乎都与此问题无关,特别是因为我通过命令提示符而不是IDE运行文件(尽管当我通过IDE运行时也会发生错误)。
我的程序将生成如下所示的文件路径:C:\Users<User>DesktopLocal ProjectsShortcutsFoldertest.lnk
,我每次都会得到一个错误的消息:
File "C:Users<User>OneDrive - <Organization>DesktopLocal Projectscreate 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)
错误信息似乎表明路径名没有以". link "结尾。或".url",但我已经确认该变量确实以"。link "结尾。发生此错误时。我已经多次尝试重新安装软件包,但都无济于事。
需要注意的是,我的桌面文件夹("C:Users\ desktop ")实际上是我配置为重定向到OneDrive路径的连接。
正如错误消息所示,快捷路径名必须以. link或.url结尾。你的代码以空格或双引号结束
我已经编辑了你的代码来解决这些问题,并使你的文件路径字符串为原始字符串,所以你不需要转义反斜杠。
if makeShortcut:
shortcut_path = ""
if isAssignment:
shortcut_path = fr"C:UsersUserDesktop{shortcuts_folder}{modified_class_name}Assignments{shortcut_rel_path}{project_name}.lnk"
else:
shortcut_path = fr"C:UsersUserDesktop{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:UsersUserAppDataLocalProgramsMicrosoft VS CodeCode.exe"
elif editor.lower() == "intellij":
shortcut.TargetPath = f"idea"
# set the icon to the intellij icon
shortcut.IconLocation = fr"C:TaskbarIconsidea.ico"
elif editor.lower() == "pycharm":
shortcut.TargetPath = f"pycharm"
# set the icon to the pycharm icon
shortcut.IconLocation = fr"C:TaskbarIconspycharm.ico"
shortcut.Arguments = f"{folder_path}"
shortcut.save()
if isGithub:
git_shortcut_path = fr"C:UsersUserDesktopLocal ProjectsShortcuts{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:UsersUserDesktop{shortcuts_folder}{modified_class_name}"
git_shortcut.save()