Windows快捷方式备份还原脚本
适用场景
单纯备份快捷方式
安装程序迁移至其他磁盘(程序文件父子层级关系不变的情况下)
安装程序还是在原来的磁盘的位置,重建快捷方式(重装系统后,安装程序到重装前同样的路径,恢复快捷方式)
功能介绍
备份脚本所在目录的所有’lnk’后缀名的快捷方式到shortcut_backup文件目录
恢复备份时对应的快捷方式到脚本相同路径(恢复时指定磁盘盘符)
使用说明及安装教程
windows环境
运行先前条件
系统提前安装好python3(理论上win7以上版本都支持)
安装python后需将python路径添加至环境变量
运行Re_Shortcut.bat和Reshortcut.py时需在同个目录
运行脚本时,文件都存放在快捷方式所在的同个目录下
安装运行
从 Python官网 下载python3并安装(安装时注意勾选Add python.exe to PATH)
下载Re_Shortcut.bat和Reshortcut.py文件(下载地址: https://gitee.com/cosann/omb_pyscript.git)
直接运行Re_Shortcut.bat
根据菜单提示执行对应功能(首次执行需安装环境。选项1)
使用演示
- 将文件和快捷方式放在同一目录
- 执行Re_Shortcut.bat
- 选择2进行备份
- 查看备份
备份成功 恢复备份
输入磁盘序号,将设所有程序文件迁移至D盘
输入d运行(支持大小写,同样效果)
查看新快捷方式路径
修改成功
其他说明
核心功能由python实现,进行bat封装是为了简易操作
python 运行方式直接运行为在终端执行python脚本
仅Reshortcut.py文件即可实现备份功能
备份后生成Rebuild_shortcut.json为原先快捷方式的数据,因此只要有该json文件,使用Reshortcut.py就可以恢复原先的快捷方式
python文件里保留了调试参数重写脚本的执行路径,供测试使用
初版代码示例(后续会持续更新到git仓库)
Re_Shortcut.batchcp 65001 > nul setlocal enabledelayedexpansion @echo off rem @Author:cosann rem @Script_Name:Re_Shortcut.bat rem @Version:1.0 rem @Create_Date:20230309 rem @Description: rem Windows快捷方式备份还原脚本 rem @Update content: title "快捷方式备份还原脚本" :main echo "快捷方式备份还原" echo echo "1. 初始化环境" echo "2. 备份快捷方式" echo "3. 恢复快捷方式" echo "4. 退出脚本" set n= set /p var="请输入序号选择执行功能:" if "%var%" == "1" ( echo "the number equal to 1" call pip install pypiwin32 goto main pause >nul ) else if "%var%" == "2" ( call python Reshortcut.py -b goto main pause >nul ) else if "%var%" == "3" ( set /p DISK="请输入还原快捷方式的目标磁盘分区序号(例如:C D E F...)" set CMD=python Reshortcut.py -m !DISK! echo !CMD! !CMD! goto main pause >nul ) else if "%var%" == "4" ( pause exit ) else ( echo "input wrong number" goto main pause >nul )
import os import win32com.client import re import json import sys import shutil ''' @Author:cosann @Script_Name:Reshortcut.py @Version:1.0 @Create_Date:20230309 @Description: Windows快捷方式备份还原脚本 @Update content: ''' def backup_src_shortcut(f_path): # 创建备份文件夹 backup_dir = f_path + '\\shortcut_backup' if not os.path.exists(backup_dir): os.makedirs(backup_dir) print("backup_dir: ", backup_dir) for link_str in os.listdir(f_path): if link_str.endswith('.lnk'): full_shortcut = os.path.join(f_path, link_str) # print(full_shortcut) shutil.copy(full_shortcut, backup_dir) f_result_code = 0 return backup_dir, f_result_code def make_target_shortcut(f_path): # 重写path # f_path = "C:\\Users\\Cosann\\Desktop\\dirs" # 调用函数备份快捷方式 back_dir, result_code = backup_src_shortcut(f_path) print("源快捷方式备份成功,备份路径: {}\n".format(back_dir)) if result_code == 0 else print("源快捷方式备份失败") # if result_code == 0: # print("源快捷方式备份成功,备份路径: {}".format(back_dir)) shell = win32com.client.Dispatch("WScript.Shell") shortcut_list = [] for fn in os.listdir(f_path): if fn.endswith('.lnk'): com_path = f_path + '\\' + fn shortcut = shell.CreateShortCut(com_path) shortcut_dict = {fn: shortcut.Targetpath} # print(fn) shortcut_list.append(shortcut_dict) # print(shortcut.Targetpath) print(shortcut_list) # 将快捷方式名称和对应的真实路径写入json文件 with open('Rebuild_shortcut.json', 'w', encoding='utf-8') as obj: # obj.write(str(re_shortcut_list)) json.dump(shortcut_list, obj) # print(os.stat('Rebuild_shortcut.json')) if os.path.exists('Rebuild_shortcut.json') and os.stat('Rebuild_shortcut.json').st_size > 2: print(f"\n生成数据源文件Rebuild_shortcut.json成功\n") else: print(f"\n生成数据源文件失败,请检查!\n") def del_src_shortcut(f_src_shortcut): # 删除源快捷方式 # 遍历当前文件下的所有文件 for src_shortcut in os.listdir(os.getcwd()): # 若是快捷方式执行 if src_shortcut.endswith('.lnk'): # 若包含在字典中 if src_shortcut in f_src_shortcut: # 删除 os.remove(src_shortcut) def create_shortcut(f_target_disk): f_target_disk = target_disk + ':' # os.chdir('E:\\test') shell = win32com.client.Dispatch("WScript.Shell") with open('Rebuild_shortcut.json', 'r', encoding='utf-8') as obj: shortcut_list = json.load(obj) # 修改真实路径盘符 re_shortcut_list = [] for shortcut_dict in shortcut_list: #调用删除函数 del_src_shortcut(shortcut_dict) # print(shortcut_dict) for key, value in shortcut_dict.items(): # items方法返回一个键值对列表 re_shortcut_dict = {key: re.sub('^[A-Z]:', f_target_disk, value)} # print(re_shortcut_dict) re_shortcut_list.append(re_shortcut_dict) print(re_shortcut_list) for shortcut_dict in re_shortcut_list: # print(shortcut_dict) for key, value in shortcut_dict.items(): # print("key=", key) dest_shortcut = shell.CreateShortCut(key) dest_shortcut.TargetPath = value dest_shortcut.save() # print("key=", key) print("\n快捷方式[{}]创建成功!\n".format(key)) if __name__ == '__main__': # target_disk = 'K' if sys.argv[1:]: array_sum = len(sys.argv[1:]) # 位置参数2为Backup if sys.argv[1] == "-b" and array_sum == 1: # print("backup") scripts_path = os.getcwd() print("scripts_path: " + scripts_path) # 创建目标字典 make_target_shortcut(scripts_path) # 位置参数2为Make elif sys.argv[1] == "-m" and array_sum == 2: # print("make") target_disk = sys.argv[2] # 创建快捷方式 create_shortcut(target_disk) else: script_name = sys.argv[0] print("脚本用法:\n1. 备份源快捷方式数据 命令:[ {} -b ]".format( script_name)) print("2. 重新创建快捷方式 命令:[ {} -m 盘符 ]".format(script_name)) else: script_name = sys.argv[0] print("脚本用法:\n1. 备份源快捷方式数据 命令:[ {} -b ]".format( script_name)) print("2. 重新创建快捷方式 命令:[ {} -m 盘符 ]".format(script_name))
有需修改的地方,欢迎提出交流~
文章标注
注意,你当前浏览的内容来自小路博客的分享,小路博客官方网址:http://bbs.dididsw.cn,分享本站内容需要标注本文链接。
评论 (0)