背景:
我在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\OneDrive robocopy %source% %destination% /MIR /FFT /Z /XO echo 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 $robocopyCommand Write-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 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
用于遍历源文件夹的所有文件和子目录。
- 使用
-
保存文件:
将文件保存为backup.py
。 -
设置任务计划程序定期执行:
同样,你可以使用任务计划程序来定期运行 Python 脚本。设置方法如下:- 打开 任务计划程序。
- 创建新的任务,并设置触发条件为 每 30 天。
- 在“操作”步骤中选择 启动程序,并选择 Python 可执行文件的路径(例如
C:\Python39\python.exe
)。 - 在“添加参数”框中输入脚本路径,如:
C:\path\to\backup.py