使用Python修改Windows快捷方式

你如何改变使用Python的Windows快捷方式?

例如来自:

H:\My Music\some_file.mp3 

至:

 D:\Users\Myself\My Music\some_file.mp3 

下面是使用Winshell库在Python中执行此操作的另一个更合适的方法: 使用Python创建Windows快捷方式 。 在你的情况下,代码将如下所示:

 import os, winshell from win32com.client import Dispatch desktop = winshell.desktop() path = os.path.join(desktop, "some_file.mp3.lnk") target = r"D:\Users\Myself\My Music\some_file.mp3" wDir = r"D:\Users\Myself\My Music" icon = r"D:\Users\Myself\My Music\some_file.mp3" shell = Dispatch('WScript.Shell') shortcut = shell.CreateShortCut(path) shortcut.Targetpath = target shortcut.WorkingDirectory = wDir shortcut.IconLocation = icon shortcut.save() 

现有的快捷方式应该被删除或重写。 如果你需要它的批处理快捷方式文件,那么我认为有一些方法来读取现有的快捷方式的路径,但没有设法找到它。

乔纳森的解决方案完美地工作。 这是我实现这个功能的有用功能。 只需传入快捷方式文件的名称(例如“Mozilla Firefox.lnk”,无需指定整个文件路径)以及新的快捷方式目标,并将其修改。

 import os, sys import pythoncom from win32com.shell import shell, shellcon def short_target(filename,dest): shortcut = pythoncom.CoCreateInstance ( shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink ) desktop_path = shell.SHGetFolderPath (0, shellcon.CSIDL_DESKTOP, 0, 0) shortcut_path = os.path.join (desktop_path, filename) persist_file = shortcut.QueryInterface (pythoncom.IID_IPersistFile) persist_file.Load (shortcut_path) shortcut.SetPath(dest) mydocs_path = shell.SHGetFolderPath (0, shellcon.CSIDL_PERSONAL, 0, 0) shortcut.SetWorkingDirectory (mydocs_path) persist_file.Save (shortcut_path, 0) 

唯一的依赖是pywin32库。 还要注意,可以在快捷方式目标中指定选项和参数。 要实现,只需调用:

 short_target("shortcut test.lnk",'C:\\') #note that the file path must use double backslashes rather than single ones. This is because backslashes are used for special characters in python (\n=enter, etc) so a string must contain two backslashes for it to be registered as one backslash character. 

这个例子将把你桌面上一个名为“shortcut test”的快捷方式的目的地设置成打开硬盘根目录(C :)中的文件管理器的快捷方式。

以下是如何使用Windows脚本主机创建快捷方式: http : //msdn.microsoft.com/zh-cn/library/fywyxt64

尝试将其写入Python文件并动态运行。

这里详细介绍另一种方法

使用快捷方式更新示例。 你可以通过shortcut.GetPath() ,修改它,然后使用shortcut.SetPath()方法来设置它。