将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…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...