将OneDrive上的文件定期备份到移动硬盘
背景:
我在oneDrive上存了很多文件,分布在多个文件夹中,也有套了好几层文件夹的情况。我希望每隔一段时间,将oneDrive上的所有文件向移动硬盘上拷贝一份,但是我只想将距离上一次向移动硬盘拷贝的文件相比,发生变化的一部分,也就是只拷贝距离上一次有变化(新增、删除或修改)的文件。但是每一次拷贝时,都将所有文件都一一比对太麻烦了,有什么办法能让我快速的知道,距离上一次拷贝,都有哪些文件(夹)发生了变化吗?可以令我有针对性的拷贝到移动硬盘中
而且我想用批处理脚本或powershell脚本或python脚本的方式,定期(30天)执行一次备份过程,具体过程如下:
可以使用批处理脚本、PowerShell 脚本或 Python 脚本来实现定期(每 30 天)执行一次增量备份的任务。下面是这三种方式详细的代码和配置步骤。
文章目录
- 1.批处理脚本(.bat)
- 步骤:
- 2. PowerShell 脚本
- 步骤:
- 3. Python 脚本
- 步骤:
1.批处理脚本(.bat)
批处理脚本非常适合简单的增量备份任务。可以利用 robocopy 命令来进行增量备份。你需要使用 任务计划程序 来定期运行这个脚本。
步骤:
-
编写批处理脚本:
使用记事本或任何文本编辑器编写一个批处理脚本(如
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只复制修改过的文件,忽略旧文件。
-
保存文件:
将脚本保存为backup.bat。 -
设置任务计划程序定期执行:
- 打开 任务计划程序(在开始菜单搜索 “任务计划程序”)。
- 选择 创建基本任务。
- 设置任务名称(例如:
OneDrive Backup)。 - 设置触发条件为 每 30 天,然后指定任务的开始时间。
- 在“操作”步骤中选择 启动程序,并浏览选择你刚才创建的
backup.bat文件。 - 按照提示完成任务设置,之后任务会按照设定的间隔(每 30 天)自动运行。
2. PowerShell 脚本
PowerShell 脚本比批处理脚本更灵活,可以进行更多的错误处理和日志记录。你可以使用 robocopy 也可以使用 PowerShell 的内建命令来进行文件备份。
步骤:
-
编写 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" -
保存文件:
将文件保存为backup.ps1。 -
设置任务计划程序定期执行:
和批处理脚本类似,使用任务计划程序来定期执行 PowerShell 脚本。你可以按照以下步骤设置:- 打开 任务计划程序。
- 创建一个新的基本任务,命名为
OneDrive PowerShell Backup。 - 设置触发条件为 每 30 天。
- 在“操作”步骤中选择 启动程序,然后在“程序或脚本”框中输入以下内容:
powershell.exe - 在“添加参数”框中输入:
这里的-ExecutionPolicy Bypass -File "C:\path\to\backup.ps1"-ExecutionPolicy Bypass是为了确保脚本能够运行,即使 PowerShell 执行策略被限制。
3. Python 脚本
Python 脚本的优势在于它具有更强的灵活性,你可以自定义日志记录、错误处理等。使用 shutil 库或者外部库(如 rsync 或 os)进行文件复制。
步骤:
-
安装必要的库:
如果你打算使用shutil库,可以直接进行复制。对于增量备份,可以使用filecmp库来比较文件。如果你需要安装
rsync或其他高级工具,你可以通过命令pip install rsync等方式进行安装。 -
编写 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用于遍历源文件夹的所有文件和子目录。
- 使用
-
保存文件:
将文件保存为backup.py。 -
设置任务计划程序定期执行:
同样,你可以使用任务计划程序来定期运行 Python 脚本。设置方法如下:- 打开 任务计划程序。
- 创建新的任务,并设置触发条件为 每 30 天。
- 在“操作”步骤中选择 启动程序,并选择 Python 可执行文件的路径(例如
C:\Python39\python.exe)。 - 在“添加参数”框中输入脚本路径,如:
C:\path\to\backup.py
相关文章:
将OneDrive上的文件定期备份到移动硬盘
背景: 我在oneDrive上存了很多文件,分布在多个文件夹中,也有套了好几层文件夹的情况。我希望每隔一段时间,将oneDrive上的所有文件向移动硬盘上拷贝一份,但是我只想将距离上一次向移动硬盘拷贝的文件相比,发…...
从0开始,来看看怎么去linux排查Java程序故障
一,前提准备 最基本前提:你需要有liunx环境,如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后,你还需要安装jdk和配置环境变量 1. 安装JDK(以OpenJDK 17为例) 下载JDK…...
DeepSeek-V3:开源多模态大模型的突破与未来
目录 引言 一、DeepSeek-V3 的概述 1.1 什么是 DeepSeek-V3? 1.2 DeepSeek-V3 的定位 二、DeepSeek-V3 的核心特性 2.1 多模态能力 2.2 开源与可扩展性 2.3 高性能与高效训练 2.4 多语言支持 2.5 安全与伦理 三、DeepSeek-V3 的技术架构 3.1 模型架构 3…...
Deep Sleep 96小时:一场没有硝烟的科技保卫战
2025年1月28日凌晨3点,当大多数人还沉浸在梦乡时,一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击,警报声响彻机房,一场针对中国关键信息基础设施的网络攻击来势汹汹! 面对美国发起的这场…...
Redis地理散列GeoHash
GeoHash是一种用于地理位置编码的算法,将二维的地理坐标(纬度和经度)转换为一维的字符串表示,从而实现对地理位置的高效存储和查询。Redis作为一个内存数据库,提供了对GeoHash的支持,使得地理位置相关的数据…...
JAVA安全—反射机制攻击链类对象成员变量方法构造方法
前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…...
专业学习|一文了解并实操自适应大邻域搜索(讲解代码)
一、自适应大邻域搜索概念介绍 自适应大邻域搜索(Adaptive Large Neighborhood Search,ALNS)是一种用于解决组合优化问题的元启发式算法。以下是关于它的详细介绍: -自适应大领域搜索的核心思想是:破坏解、修复解、动…...
9. k8s二进制集群之kube-controller-manager部署
同样在部署主机上创建证书请求文件(为之后的证书生成做准备)根据上面的证书文件创建证书(结果会在当前目录下产生kube-controller-manager证书)创建kube-controller-manager服务配置文件创建kube-controller-manager服务启动文件同步kube-controller-manager证书到对应mast…...
轮转数组-三次逆置
题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 void rotate(int* nums, int numsSize, int k){}示例: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] …...
3 卷积神经网络CNN
1 Image Classification (Neuron Version) – 1.1 Observation 1 1.2 Observation 2 如果不同的receptive field需要相同功能的neuron,可以使这些neuron共享参数 1.3 Benefit of Convolutional Layer 2 Image Classification (Filter Version) 不用担心filter大小…...
穷举vs暴搜vs深搜vs回溯vs剪枝系列一>黄金矿工
目录 决策树:代码设计代码: 决策树: 代码设计 代码: class Solution {boolean[][] vis;int ret,m,n;public int getMaximumGold(int[][] grid) {m grid.length;n grid[0].length;vis new boolean[m][n]; for(int i 0; i <…...
java基础1(黑马)
一、初识Java 1.Java背景知识 1)Java是美国SUN公司在1995年推出的一门计算机高级编程语言。 2)Java早期名称为OAK,后来才改为Java。 3)Java之父:詹姆斯高斯林。 4)2009年,SUN公司被Oracle公…...
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}; }// …...
2025 持续防范 GitHub 投毒,通过 Sharp4SuoExplorer 分析 Visual Studio 隐藏文件
在2024年底的网络安全事件中,某提权工具被发现植入后门,攻击者利用 .suo 文件作为隐蔽的攻击方式。由于 .suo 文件是 Visual Studio 项目的隐藏配置文件,通常不为安全研究人员所关注,因此为攻击者提供了潜在的攻击渠道。 初步调查…...
PCB走线宽度与过流能力参考
我们PCB走线,线宽与允许通过电流的大小是什么样的?几个因素 1、允许的温升:如果能够允许的铜线升高的温度越高,那么允许通过的电流自然也就越高 2、走线的线宽:线越宽 ,导线横截面积越大,电阻…...
电商项目-分布式事务(四)基于消息队列实现分布式事务
基于消息队列实现分布式事务,实现消息最终一致性 如何基于消息队列实现分布式事务? 通过消息队列实现分布式事务的话,可以保证当前数据的最终一致性。实现思路:将大的分布式事务,进行拆分,拆分成若干个小…...
g++ -> make -> cmake(草稿)
1 Windows上安装mingw 2 构建一个 c 项目 3 g 编译 4 make 编译 5 cmake 编译...
JSON常用的工具方法
前言: 在日常开发中,JSON 数据的处理是常见的需求。无论是数据转换、格式化还是与其他格式的互转,掌握一些常用的工具方法可以大大提高开发效率。本文将介绍一些实用的 JSON 操作方法,帮助你快速上手。 JSON常用的工具方法 1.json字符串转换…...
【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信
Kubernetes中Pod间的通信 本系列文章共3篇: 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信(本文介绍)【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信…...
[权限提升] Windows 提权 维持 — 系统错误配置提权 - Trusted Service Paths 提权
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:Trusted Service Paths 提权原理 Windows 的服务通常都是以 System 权限运行的,所以系统在解析服务的可执行文件路径中的空格的时候也会以 System 权限进行解析&a…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
