如何使用Python更改Windows快捷方式?使用Python修改Windows快捷方式
例如来自:
H:\My Music\some_file.mp3
到:
D:\Users\Myself\My Music\some_file.mp3
如何使用Python更改Windows快捷方式?使用Python修改Windows快捷方式
例如来自:
H:\My Music\some_file.mp3
到:
D:\Users\Myself\My Music\some_file.mp3
下面是如何,你可以使用Windows脚本宿主创建快捷方式:http://msdn.microsoft.com/en-us/library/fywyxt64
试着写一个从Python的文件,并动态运行它。
下面是使用Winshell库在Python中执行此操作的另一个更合适的方法:Using Python to create Windows shortcuts。在你的情况下,代码将如下所示:
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()
现有的快捷方式应该被删除或重写。如果您需要它来批量处理快捷方式文件,那么我认为有一些方法可以从现有快捷方式中读取路径,但无法找到它。
'winshell'可能并不遥远。仍然不是内置的。为了得到用户的桌面位置,你也可以这样做:'os.path.join(os.getenv('userprofile'),'desktop')' – ewerybody
另一种方法是详细here
使用快捷更新的例子。您可以,修改它,然后使用shortcut.SetPath()
方法来设置它。
乔纳森的解决方案完美运作。这是我实现这个功能的有用功能。只需传入快捷方式文件的名称(例如“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.
这个例子将设置你的桌面上的快捷方式名为“快捷方式测试”,在硬盘驱动器的根目录下(C打开文件管理器快捷方式的目标: )。
我正在寻找一种将'SetWorkingDirectory'设置为“像普通程序一样工作的捷径。这帮助了我。 –
以前的答案是完全有效的,但要真正完成它们我添加了批量编辑的代码,因为我想你可能有很多编辑链接。
使用这个,如果你想同时编辑多个链接:
import os, sys
import glob
import pythoncom
from win32com.shell import shell, shellcon
def shortcut_target (filename):
link = pythoncom.CoCreateInstance (
shell.CLSID_ShellLink,
None,
pythoncom.CLSCTX_INPROC_SERVER,
shell.IID_IShellLink
)
persist_file = link.QueryInterface (pythoncom.IID_IPersistFile)
persist_file.Load (filename)
#
# GetPath returns the name and a WIN32_FIND_DATA structure
# which we're ignoring. The parameter indicates whether
# shortname, UNC or the "raw path" are to be
# returned. Bizarrely, the docs indicate that the
# flags can be combined.
#
name, _ = link.GetPath (shell.SLGP_UNCPRIORITY)
target = name
target = target.replace('H:\My Music', 'D:\Users\Myself\My Music')
link.SetPath(target)
persist_file.Save(filename, 0)
return name
def shell_glob (pattern):
for filename in glob.glob (pattern):
if filename.endswith (".lnk"):
print shortcut_target(filename)
desktop = "H:\My Music\"
for filename in shell_glob (os.path.join (desktop, "*")):
print filename
你有没有尝试过这样的:http://stackoverflow.com/questions/6805881/modify-windows-shortcuts-using-python/6806426 #6806426? – Hnatt
[unicode快捷方式的后续问题](http://stackoverflow.com/questions/6916069/modify-windows-unicode-shortcuts-using-python) – Jonathan