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

将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\OneDriverobocopy %source% %destination% /MIR /FFT /Z /XOecho 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 $robocopyCommandWrite-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 dircmpsource = 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.lryc.cn/news/532057.html

相关文章:

  • 从0开始,来看看怎么去linux排查Java程序故障
  • DeepSeek-V3:开源多模态大模型的突破与未来
  • Deep Sleep 96小时:一场没有硝烟的科技保卫战
  • Redis地理散列GeoHash
  • JAVA安全—反射机制攻击链类对象成员变量方法构造方法
  • 专业学习|一文了解并实操自适应大邻域搜索(讲解代码)
  • 9. k8s二进制集群之kube-controller-manager部署
  • 轮转数组-三次逆置
  • 3 卷积神经网络CNN
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>黄金矿工
  • java基础1(黑马)
  • ES6 对象扩展:对象简写,对象属性 表达式,扩展运算符 ...,Object.assign,Object.is,用法和应用场景
  • 2025 持续防范 GitHub 投毒,通过 Sharp4SuoExplorer 分析 Visual Studio 隐藏文件
  • PCB走线宽度与过流能力参考
  • 电商项目-分布式事务(四)基于消息队列实现分布式事务
  • g++ -> make -> cmake(草稿)
  • JSON常用的工具方法
  • 【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信
  • [权限提升] Windows 提权 维持 — 系统错误配置提权 - Trusted Service Paths 提权
  • 8. k8s二进制集群之Kubectl部署
  • 初学 Xvisor 之理解并跑通 Demo
  • 深度内容运营与开源AI智能名片2+1链动模式S2B2C商城小程序在打造种草社区中的应用研究
  • RNN/LSTM/GRU 学习笔记
  • 音频录制一般在什么情况下会选择保存为PCM?什么情况会选择保存为WAV?
  • C#常用744单词
  • 如何理解算法的正确性?
  • 蓝桥杯试题:排序
  • 实验十一 Servlet(二)
  • 第五天 初步了解ArkTS和ArkUI
  • java中的锁面试题