Skip to content

Instantly share code, notes, and snippets.

@bussiere
Created August 13, 2010 13:40
Show Gist options
  • Save bussiere/522907 to your computer and use it in GitHub Desktop.
Save bussiere/522907 to your computer and use it in GitHub Desktop.
#what : Changing the drive of a list of shortcut automatically must be placed in the shortcut directory on the usb key
#why : i've made some shortcut on my usb key for launchy and i had always to change them if on one pc the usb drive was i: on an other it was k: #it was such a pain each time. Now it change all the shortcut automatically.
import sys,glob,re
import pythoncom
from win32com.shell import shell
import win32com
import win32com.client
import string
"""
By bussiere bussiere @at gmail.com
thanks to :
http://www.blog.pythonlibrary.org/
http://www.blog.pythonlibrary.org/?p=21
and :
http://codesnippets.joyent.com/tag/python
http://codesnippets.joyent.com/tag/python#post529
"""
__Author__ ="bussiere"
__Email__ = "bussiere @at gmail.com"
__Titre__ = "Changing shortcut on a usb key v2"
__Description__ = "Changing the drive of a list of shortcut automatically must be placed in the shortcut directory on the usb key"
__Discussion__ = "i've made some shortcut on my usb key for http://www.launchy.net/ launchy and i had always to change them if on one pc the usb drive was i: on an other it was k: it was such a pain each time. Now it change all the shortcut automatically."
__Tags__ ="Usb shortcut windows key raccourcis"
class Win32Shortcut:
def __init__(self, lnkname):
self.shortcut = pythoncom.CoCreateInstance(
shell.CLSID_ShellLink, None,
pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink)
self.shortcut.QueryInterface(pythoncom.IID_IPersistFile).Load(lnkname)
def __getattr__(self, name):
return getattr(self.shortcut, name)
def main():
shell2 = win32com.client.Dispatch('WScript.Shell')
# here we just get the drive where is the usb key
drive = sys.path[0][0:2]
#here we list all the file on the shortcut directory
files = glob.glob(sys.path[0]+'/*')
# here we take one file path
path = glob.glob(sys.path[0])[0]
#we normalize the path for python
path = string.replace(path,'\\','\\\\')
# we prepare a regexp for finding the shortcuts
p = re.compile('\.lnk')
for file in files :
# we list all the files and find the shortcuts .lnk
if p.search(file) :
# we get the shortcut
s = Win32Shortcut(file)
#we take the target directory of the shortcut
itemPath = s.GetPath(0)[0]
#we normalize the path of the shortcut
file = string.replace(file,'\\','\\\\')
# we overwrite the shortcut (same directory, same name).
shortcut = shell2.CreateShortCut(file)
#we replace the target path (drive = usb drive, path without the drive = itemPath[2:])
shortcut.Targetpath = drive + itemPath[2:]
#we set the directory drive
shortcut.WorkingDirectory = path
#we save the shortcut
shortcut.save()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment