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

news/2025/2/6 15:48:32 标签: 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.niftyadmin.cn/n/5843151.html

相关文章

Ubuntn24.04安装

1.镜像下载 https://cn.ubuntu.com/download Ubuntu 24.04.1 (Noble Numbat) 进入下载即可 2.安装系统 打开虚拟机 选择语言 输入用户名和密码 安装ssh 安装完成重启即可。 3.可能出现的问题 关于Ubuntu系统虚拟机出现频繁闪屏,移动和屏幕适应大小问题_vmware安…

在C#中使用DeepSeek API实现自然语言处理、文本分类、情感分析等

在C#中使用DeepSeek API可以实现多种功能,例如自然语言处理、文本分类、情感分析等。以下是具体的实现方法和步骤: 准备工作 获取API密钥:访问DeepSeek官网(DeepSeek),注册账号并获取API密钥。 安装必要的…

ES6 对象扩展:对象简写,对象属性 表达式,扩展运算符 ...,Object.assign,Object.is,用法和应用场景

1. 对象属性简写 1.1 基本语法 // 传统写法 const name John; const age 25; const user {name: name,age: age };// ES6 简写语法 const user {name,age };1.2 实际应用场景 // 1. 函数返回对象 function createUser(name, age, email) {return {name,age,email}; }// …

安装和卸载RabbitMQ

我的飞书:https://rvg7rs2jk1g.feishu.cn/docx/SUWXdDb0UoCV86xP6b3c7qtMn6b 使用Ubuntu环境进行安装 一、安装Erlang 在安装RabbitMQ之前,我们需要先安装Erlang,RabbitMQ需要Erlang的语言支持 #安装Erlang sudo apt-get install erlang 在安装的过程中,会弹出一段信息,此…

SpringBoot+Layui+Easyweb开发的Java全新RBAC权限管理系统

单体项目,注释丰富,代码简洁。在国策讲究自主可控的时候,适配国产数据库、主流数据库Mysql、Oracle、Mssql、Postgresql,小诺的产品一致追求简洁干净,一套代码搞定!同时支持国产中间件部署、麒麟操作系统、…

Node.js学习指南

一、模块化规范 nodejs使用的模块化规范 叫做 common.js 规范: 每一个模块都有独立的作用域 代码在各自模块中执行 不会造成全局污染 每一个模块都是一个独立的文件(module对象) 模块可以被多次加载(module.exports 属性) 但是仅…

国产化创新 守护开放边界网络安全

当今数字化浪潮的席卷下,企业、医院、政府部门等各类机构的信息化建设正以前所未有的速度推进。 在这个数字化转型的关键时期,尤其是在涉及国家核心利益和敏感数据的领域,我们不仅要追求技术的先进性,更要确保安全性和自主可控性…

《2025,AI重塑世界进行时》

开年爆点,AI 浪潮再掀高潮 2025 年开年,AI 领域便热闹非凡,热点事件不断,让人深刻感受到这股科技浪潮正以汹涌之势奔腾而来。先是深度求索公司(DeepSeek)的 DeepSeek - R1 模型横空出世,迅速在国…