青衿之志,履践致远

外部存储自动数据同步工具USBbackuptools

开源一款自动化数据备份(同步)工具,将USB外部存储设备连接时进行自动备份,搭配FreeFileSync使用。本工具旨在解决备份盘的随时同步问题,同时确保数据的即时更新,以免在数据出现问题时即时找回。

项目名称:外部存储自动数据同步工具USBbackuptools

完成时间:2023年5月10日

记录时间:2023年6月5日


作者前言

数据毁了,不想多说,遂买了固态做备份盘,写了这个工具以免再次丢数据,并且添加了windows弹窗通知

工具介绍

本工具需要搭配FreeFileSync使用,系统环境WINDOWS,用法简单:

  1. 在电脑某盘解压文件夹,在备份盘解压相应文件夹;
  2. 添加事件触发器;
  3. 打开工具做备份配置;
  4. 拔出USB设备,再插入USB设备,检查是否开始正常备份;

本工具配合备份工具FreeFileSync使用,并在压缩包中提供了一个便携版的FreeFileSync,无需安装即可使用;也可以直接使用FreeFileSync手动同步数据,使用方法可以参考CSDN;本工具无需网络环境。

正常情况下插入U盘时会弹窗提示,备份完成后同样弹窗提示;为了保障数据安全提高可恢复性,工具提供双备份文件夹,即一个当前备份目录,一个历史备份目录,每次更新备份会重写旧的备份文件;您也可以在backup文件夹内创建其他文件夹,如backup2023-6-6,来保存您的备份记录。

若对工具有自定义需求且有一定的阅读代码基础,可以通过修改BatchRun.ffs_batch和backup_lock.vbs文件实现,具体代码可以参考下文。

安装与配置

  1. 将压缩包FreeFileSync.zip解压,放入外部存储设备根目录

    在USB设备根目录创建backup文件夹以及new_backup和last_history文件夹(temp不用),见下图:

    下载backup_lock.vbs文件,放在电脑任意位置即可

  2. win+R打开运行,输入compmgmt.msc,打开计算机管理,选择系统工具》任务计划程序库:

    完成以下四项配置后保存关闭:

    注意backup_lock.vbs设置路径

  3. 打开备份文件,设置同步文件夹,并保存,具体使用和其他操作可以百度搜:

    上图配置命令:A:\FreeFileSync\USBbackuptools.exe -e A:\backup\last_history A:\backup\new_backup

    保存的batch脚本文件命名:BatchRun.ffs_batch,与USBbackuptools.exe放在同一目录中

  4. 正常情况下使用:

    • 插入U盘:

    • 等待同步完成:

    • 结束

    • 注:如果图标消失不见或有修改图标需求,在外部存储设备根目录放入fanqie_big.ico,并隐藏即可,fanqie_big.ico可以在项目仓库中下载

代码

  • USBbackuptools.exe,通过python编译:

    from plyer import notification
    from os import system, rename
    import sys
    
    choose = sys.argv[1]
    
    if choose == "-s":
        filesync_path = sys.argv[2]
        batch_path = sys.argv[3]
        notification.notify(
            title='USBbackup_START',
            app_name='USBbackup',
            message='U盘A正在更新对设定文件夹的备份',
            timeout=1,
        )
        system(f"{filesync_path} {batch_path}")
        notification.notify(
            title='USBbackup_END',
            app_name='USBbackup',
            message='U盘A备份更新结束……',
            timeout=1,
        )
        sys.exit(0)
    
    elif choose == "-e":
        old_path = sys.argv[2]
        new_path = sys.argv[3]
        rename(new_path,f"{old_path}_temp")
        rename(old_path,new_path)
        rename(f"{old_path}_temp",old_path)
    
    
  • backup_lock.vbs:

    Set objShell = CreateObject("WScript.Shell")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    WScript.Sleep 2000
    
    ' 检查 U 盘 A 是否存在
    If objFSO.DriveExists("A:\") Then
        ' 禁止 U 盘 A 弹出
        objShell.Run "cmd /c echo. > A:\$leech$", 0, True
    
        ' 运行备份命令
        objShell.Run "cmd /c start /B """" ""A:\FreeFileSync\USBbackuptools.exe"" -s ""A:\FreeFileSync\FreeFileSyncPortable.exe"" ""A:\FreeFileSync\BatchRun.ffs_batch""", 0, True
    
        ' 解除禁止 U 盘 A 弹出
        objShell.Run "cmd /c del A:\$leech$", 0, True
    End If
    
    ' 持续监测 U 盘 A 是否存在
    Do Until Not objFSO.DriveExists("A:\")
        WScript.Sleep 3000
    Loop
    

其他

项目地址:https://github.com/2740908911/USBbackuptools

有问题请提交issus

作者:Fanqie

联系方式:2740908911@qq.com

注:本文及文中内容未经允许禁止私自转载或使用!

添加新评论