当前位置: 首页 > article >正文

将OneDrive上的文件定期备份到移动硬盘

背景:

我在oneDrive上存了很多文件,分布在多个文件夹中,也有套了好几层文件夹的情况。我希望每隔一段时间,将oneDrive上的所有文件向移动硬盘上拷贝一份,但是我只想将距离上一次向移动硬盘拷贝的文件相比,发生变化的一部分,也就是只拷贝距离上一次有变化(新增、删除或修改)的文件。但是每一次拷贝时,都将所有文件都一一比对太麻烦了,有什么办法能让我快速的知道,距离上一次拷贝,都有哪些文件(夹)发生了变化吗?可以令我有针对性的拷贝到移动硬盘中

而且我想用批处理脚本或powershell脚本或python脚本的方式,定期(30天)执行一次备份过程,具体过程如下:

可以使用批处理脚本、PowerShell 脚本或 Python 脚本来实现定期(每 30 天)执行一次增量备份的任务。下面是这三种方式详细的代码和配置步骤。


文章目录

      • 1.批处理脚本(.bat)
        • 步骤:
      • 2. PowerShell 脚本
        • 步骤:
      • 3. Python 脚本
        • 步骤:

1.批处理脚本(.bat)

批处理脚本非常适合简单的增量备份任务。可以利用 robocopy 命令来进行增量备份。你需要使用 任务计划程序 来定期运行这个脚本。

步骤:
  1. 编写批处理脚本

    使用记事本或任何文本编辑器编写一个批处理脚本(如 backup.bat)。以下是一个使用 robocopy 命令的增量备份脚本示例。

    @echo off
    set source=C:\Users\YourUser\OneDrive
    set destination=E:\Backup\OneDrive
    
    robocopy %source% %destination% /MIR /FFT /Z /XO
    
    echo Backup Completed.
    

    说明

    • robocopy 是用于文件复制的命令,其中 /MIR 参数用于镜像文件夹(同步新增、修改或删除文件)。
    • /FFT 会使用文件系统的时间戳来避免不同操作系统间时间戳微小差异的问题。
    • /Z 启用可恢复模式,支持中断后恢复。
    • /XO 只复制修改过的文件,忽略旧文件。
  2. 保存文件
    将脚本保存为 backup.bat

  3. 设置任务计划程序定期执行

    • 打开 任务计划程序(在开始菜单搜索 “任务计划程序”)。
    • 选择 创建基本任务
    • 设置任务名称(例如:OneDrive Backup)。
    • 设置触发条件为 每 30 天,然后指定任务的开始时间。
    • 在“操作”步骤中选择 启动程序,并浏览选择你刚才创建的 backup.bat 文件。
    • 按照提示完成任务设置,之后任务会按照设定的间隔(每 30 天)自动运行。

2. PowerShell 脚本

PowerShell 脚本比批处理脚本更灵活,可以进行更多的错误处理和日志记录。你可以使用 robocopy 也可以使用 PowerShell 的内建命令来进行文件备份。

步骤:
  1. 编写 PowerShell 脚本

    打开 PowerShell 编辑器或使用文本编辑器,编写以下脚本,保存为 backup.ps1

    $source = "C:\Users\YourUser\OneDrive"
    $destination = "E:\Backup\OneDrive"
    
    # 使用 robocopy 执行增量备份
    $robocopyCommand = "robocopy $source $destination /MIR /FFT /Z /XO"
    
    # 执行命令
    Invoke-Expression $robocopyCommand
    
    Write-Host "Backup Completed"
    
  2. 保存文件
    将文件保存为 backup.ps1

  3. 设置任务计划程序定期执行
    和批处理脚本类似,使用任务计划程序来定期执行 PowerShell 脚本。你可以按照以下步骤设置:

    • 打开 任务计划程序
    • 创建一个新的基本任务,命名为 OneDrive PowerShell Backup
    • 设置触发条件为 每 30 天
    • 在“操作”步骤中选择 启动程序,然后在“程序或脚本”框中输入以下内容:
      powershell.exe
      
    • 在“添加参数”框中输入:
      -ExecutionPolicy Bypass -File "C:\path\to\backup.ps1"
      
      这里的 -ExecutionPolicy Bypass 是为了确保脚本能够运行,即使 PowerShell 执行策略被限制。

3. Python 脚本

Python 脚本的优势在于它具有更强的灵活性,你可以自定义日志记录、错误处理等。使用 shutil 库或者外部库(如 rsyncos)进行文件复制。

步骤:
  1. 安装必要的库
    如果你打算使用 shutil 库,可以直接进行复制。对于增量备份,可以使用 filecmp 库来比较文件。

    如果你需要安装 rsync 或其他高级工具,你可以通过命令 pip install rsync 等方式进行安装。

  2. 编写 Python 脚本

    使用文本编辑器(如 VS Code)编写以下 Python 脚本,保存为 backup.py

    import os
    import shutil
    from filecmp import dircmp
    
    source = r"C:\Users\YourUser\OneDrive"
    destination = r"E:\Backup\OneDrive"
    
    def backup(source, destination):
        if not os.path.exists(destination):
            os.makedirs(destination)
    
        # 使用 shutil 的 copy2 函数复制文件,同时保留元数据
        for dirpath, dirnames, filenames in os.walk(source):
            # 计算当前目录相对于源目录的路径
            subdir = os.path.relpath(dirpath, source)
            dest_dir = os.path.join(destination, subdir)
    
            if not os.path.exists(dest_dir):
                os.makedirs(dest_dir)
    
            for filename in filenames:
                src_file = os.path.join(dirpath, filename)
                dest_file = os.path.join(dest_dir, filename)
    
                # 如果文件不同或目标文件不存在,则进行复制
                if not os.path.exists(dest_file) or not filecmp.cmp(src_file, dest_file, shallow=False):
                    shutil.copy2(src_file, dest_file)
    
    backup(source, destination)
    print("Backup Completed")
    

    说明

    • 使用 shutil.copy2 来复制文件并保留文件的元数据(如修改时间)。
    • 使用 filecmp.cmp 来比较源文件和目标文件,只有在文件发生变化时才复制。
    • os.walk 用于遍历源文件夹的所有文件和子目录。
  3. 保存文件
    将文件保存为 backup.py

  4. 设置任务计划程序定期执行
    同样,你可以使用任务计划程序来定期运行 Python 脚本。设置方法如下:

    • 打开 任务计划程序
    • 创建新的任务,并设置触发条件为 每 30 天
    • 在“操作”步骤中选择 启动程序,并选择 Python 可执行文件的路径(例如 C:\Python39\python.exe)。
    • 在“添加参数”框中输入脚本路径,如:
      C:\path\to\backup.py
      


http://www.kler.cn/a/533664.html

相关文章:

  • 【Elasticsearch】date range聚合
  • java项目启动脚本
  • Java高频面试之SE-17
  • Hugging Face 的研究人员正致力于打造 OpenAI 深度研究工具的“开源版
  • 深度探索DeepSeek-R1:AI大模型的本地应用与个人知识库构建
  • (dpdk f-stack)-堆栈溢出-野指针-内存泄露(问题定位)
  • 闲聊邵雍的“象数”与古诗有感
  • 从51到STM32:PWM平滑迁移方案
  • make -j$(nproc)——多核加速编译
  • 《Java核心技术 卷II》本地日期
  • 01vue3实战-----前言
  • VSCode中使用EmmyLua插件对Unity的tolua断点调试
  • Go语言并发之美:构建高性能键值存储系统
  • 动静态库的学习
  • golang命令大全11--命令的常见问题与解决方案
  • pandas获取指定日期的行
  • 网络爬虫会对服务器造成哪些影响?
  • 每日Attention学习19——Convolutional Multi-Focal Attention
  • Java学习进阶路线
  • 标准库发送数据深入理解USART
  • Windows下安装mkcert
  • 9. k8s二进制集群之kube-controller-manager部署
  • TensorFlow深度学习实战(6)——回归分析详解
  • Deepseek技术浅析(四):专家选择与推理机制
  • AI开发模式:ideal或vscode + 插件continue+DeepSeek R1
  • 0205算法:最长连续序列、三数之和、排序链表