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()