windows快捷方式备份还原脚本(代码片段)

author author     2023-03-09     701

关键词:

Windows快捷方式备份还原脚本

适用场景

  1. 单纯备份快捷方式
  2. 安装程序迁移至其他磁盘(程序文件父子层级关系不变的情况下)
  3. 安装程序还是在原来的磁盘的位置,重建快捷方式(重装系统后,安装程序到重装前同样的路径,恢复快捷方式)

功能介绍

  1. 备份脚本所在目录的所有lnk后缀名的快捷方式到shortcut_backup文件目录
  2. 恢复备份时对应的快捷方式到脚本相同路径(恢复时指定磁盘盘符)

使用说明及安装教程

windows环境

运行先前条件

  • 系统提前安装好python3(理论上win7以上版本都支持)
  • 安装python后需将python路径添加至环境变量
  • 运行Re_Shortcut.bat和Reshortcut.py时需在同个目录
  • 运行脚本时,文件都存放在快捷方式所在的同个目录下

安装运行

  1. Python官网下载python3并安装(安装时注意勾选Add python.exe to PATH)
  2. 下载Re_Shortcut.bat和Reshortcut.py文件(下载地址:https://gitee.com/cosann/omb_pyscript.git)
  3. 直接运行Re_Shortcut.bat
  4. 根据菜单提示执行对应功能(首次执行需安装环境。选项1)

使用演示

1. 将文件和快捷方式放在同一目录

2. 执行Re_Shortcut.bat

3. 选择2进行备份

4. 查看备份

备份成功

5. 恢复备份

输入磁盘序号,将设所有程序文件迁移至D盘

输入d运行(支持大小写,同样效果)

查看新快捷方式路径

修改成功

其他说明

  1. 核心功能由python实现,进行bat封装是为了简易操作
  2. python 运行方式直接运行为在终端执行python脚本
  3. 仅Reshortcut.py文件即可实现备份功能
  4. 备份后生成Rebuild_shortcut.json为原先快捷方式的数据,因此只要有该json文件,使用Reshortcut.py就可以恢复原先的快捷方式
  5. python文件里保留了调试参数重写脚本的执行路径,供测试使用

初版代码示例(后续会持续更新到git仓库)

Re_Shortcut.bat

chcp 65001 > nul
setlocal enabledelayedexpansion
@echo off

rem @Author:cosann
rem @email: 1066190125@qq.com
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
@email: 1066190125@qq.com
@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))

有需修改的地方,欢迎提出交流~

windows备份脚本(代码片段)

Windows备份脚本双击直接运行双击直接运行@echooffREM#获取管理员权限%1mshtavbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c%~s0::","","runas",1)(window.close)&am 查看详情

windows备份脚本(代码片段)

Windows备份脚本双击直接运行双击直接运行@echooffREM#获取管理员权限%1mshtavbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c%~s0::","","runas",1)(window.close)&am 查看详情

svn服务器备份(代码片段)

目录前言1hotcopy备份1.1方法说明1.2手动备份1.3自动备份1.3.1备份脚本1.3.2定时任务1.4还原方法1.4.1VisualSVN还原1.4.2SubVersion还原1.5异常提示2dump备份2.1方法说明2.2手动备份2.3自动备份2.3.1备份脚本2.3.2定时任务2.4还原方法2.5异常提示3svn... 查看详情

windows系统备份与还原

进入PE,打开GHOST,选项如下:选择备份的存放位置与文件名:选择备份方式备份状态备份完成到这里基本上就是备份的全过程。还原系统查找备份文件选择硬盘选择还原的分区开始还原还原成功到这里系统就还原成功, 查看详情

typescript键入脚本快捷方式(代码片段)

查看详情

mongodb备份还原(代码片段)

一、简介     说起来数据库的“备份-还原”,在RDBMS系统中,都有很好的支持,也有很多选项可以设置,功能强大,也能自动完成大部分的备份功能,只要当初设置好了就可以了。对于MongoDB文档型的数据库来... 查看详情

windows小技巧--目录内打开cmd的快捷方式(代码片段)

在工作中常常会有需要在某个文件夹内使用cmd的情况,例如运行某脚本,下面演示几种方法。以进入以下目录操作为例:方式一:常用的cd命令cd命令是我们平常使用比较多的方式:Win+R打开cmd窗口,默认显示如下(非管理员模式... 查看详情

windows备份脚本(代码片段)

Windows备份脚本双击直接运行双击直接运行@echooffREM#获取管理员权限%1mshtavbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c%~s0::","","runas",1)(window.close)&&exitcd/d"%~dp0"REM#####################... 查看详情

docker容器的备份和还原(代码片段)

...的备份和还原一、运行容器1.宿主机目录与容器目录同步方式运行2.进入容器3.打包容器内备份数据4.查看宿主机目录上的容器数据卷二、备份容器1.将容器打包2.删除运行容器三、还原删除的容器1.将备份的tar包导入为本地镜像2.... 查看详情

mysql数据库备份和还原

...可以在C盘下找到mydb1.sql文件了!注意,mysqldump命令是在Windows控制台下执行,无需登录mysql!!!执行SQL脚本执行SQL脚本需要登录mysql,然后进入指定数据库,才可以执行SQL脚本!!!执行SQL脚本不只是用来恢复数据库,也可以在... 查看详情

javascript用户脚本:googledocs快捷方式/vim模式(代码片段)

查看详情

在windows中自动压缩备份文件和目录的脚本(代码片段)

1、准备工作在Windows系统中首先需要安装WinRAR压缩和解压程序,并记录下exe文件的安装目录:D:\\tools\\WinRAR\\WinRAR.exe 2、编写脚本@echooff::需要进行备份的源文件夹setsourceDir=D:\\Data\\FTP\\FileZilla\\ForestLogisticsechoStart_WinRA 查看详情

在windows中自动压缩备份文件和目录的脚本(代码片段)

1、准备工作在Windows系统中首先需要安装WinRAR压缩和解压程序,并记录下exe文件的安装目录:D:\\tools\\WinRAR\\WinRAR.exe 2、编写脚本@echooff::需要进行备份的源文件夹setsourceDir=D:\\Data\\FTP\\FileZilla\\ForestLogisticsechoStart_WinRA 查看详情

mysqldump详解(代码片段)

...数据库备份的时候主要分为了逻辑备份和物理备份这两种方式。在数据迁移和备份恢复中使用mysqldump将数据生成sql进行保存是最常用的方式之一。本文将围绕着mysqldump的使用,工作原理,以及对于InnoDB和MyISAM两种不同引擎如何实... 查看详情

脚本去掉win7快捷方式的小箭头(代码片段)

...,另存为xx.batregadd"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIcons"/v29/d"%systemroot%\\system32\\imageres.dll,196"/treg_sz/ftaskkill/f/imexplorer.exeattrib-s-r-h"%userprofile%\\AppData\\Local\\iconcache.db"del"%userprofil... 查看详情

delphi创建windows快捷方式(代码片段)

如果我们编写的程序能自动创建快捷方式,将大大方便用户的使用。但是如何在程序中建立快捷方式呢,下面我们给出一个实例。由于我们是通过OLEInterface实现此功能的,因此在程序单元的uses语句中要加入ComObj、Activ... 查看详情

delphi创建windows快捷方式(代码片段)

如果我们编写的程序能自动创建快捷方式,将大大方便用户的使用。但是如何在程序中建立快捷方式呢,下面我们给出一个实例。由于我们是通过OLEInterface实现此功能的,因此在程序单元的uses语句中要加入ComObj、Activ... 查看详情

qt创建桌面快捷方式(代码片段)

windows下的快捷方式和开始菜单创建代码如下://建立桌面快捷方式QStringstrAppPath="C:/Windows/System32/notepad.exe";QStringstrDesktopLink=QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)+"/";strDesktopLink+="note 查看详情