WinRAR如何用命令行实现增量备份与自动清理?

2026年05月11日

备份数据最怕两件事:一是忘记定期执行,二是备份占用太大空间导致硬盘爆满。利用WinRAR的命令行功能,你可以轻松设计一套自动化的备份方案:第一次全量备份,之后每天只备份新增或修改过的文件(增量备份),并且自动删除30天前的旧备份。

增量备份与全量备份的区别

理解备份类型,才能准确写出脚本。

全量备份(Full Backup)

每一次都将所有源文件完整压缩。优点是恢复简单(只需要一个压缩包),缺点是占用空间大、耗时长。全量备份通常每周或每月做一次。

增量备份(Incremental Backup)

只备份自上次任何备份(全量或增量)以来发生变化的文件。WinRAR的命令行u(更新)参数就是为此设计:rar u backup.rar source会检查源文件夹中哪些文件的修改时间比压缩包内的版本更新,并将这些文件添加进去。注意:u不会删除源端已删除的文件,只会新增和更新。这使得多个时间点的增量备份可以累积到同一个压缩包中,但无法回滚到中间状态。

差异备份(Differential Backup)

差异备份是备份自上次全量备份以来的所有变化。WinRAR没有直接对应的命令,但可以通过脚本实现:每次增量前将当前全量备份复制一份,再更新。不过多数个人场景下,增量备份已足够。

准备备份脚本的基础结构

一个完整的自动备份脚本应包含:设置变量、执行压缩、测试包、清理旧备份、记录日志。

定义源路径和目标路径

batch

@echo offset SOURCE_DIR=D:\MyDocumentsset BACKUP_DIR=E:\Backupset TODAY=%date:~0,4%%date:~5,2%%date:~8,2%set FULL_BACKUP_NAME=%BACKUP_DIR%\full_%TODAY%.rarset INC_BACKUP_NAME=%BACKUP_DIR%\inc_backup.rar

判断是否需要进行全量备份

我们可以通过检查是否存在全量备份文件来决定是执行全量还是增量。简单做法:每周一执行全量,其余天数执行增量。也可以使用文件日期判断。

batch

if not exist %FULL_BACKUP_NAME% (    rar a -r -m5 -ep1 -agYYYYMMDD %BACKUP_DIR%\full_.rar %SOURCE_DIR%) else (    rar u -r -ep1 %INC_BACKUP_NAME% %SOURCE_DIR%)

注意:增量备份目标文件inc_backup.rar会不断膨胀,你可以在达到一定大小后重新建立。

实现增量备份的核心命令

rar u是增量备份的关键,但需要配合参数避免遗漏。

基础增量备份命令

rar u -r -ep1 E:\Backup\inc.rar D:\MyDocs

-r:处理子文件夹

-ep1:不存储完整路径(可选,根据你的需求)

如果压缩包不存在,u会自动创建全量。

排除临时文件

添加-x*.tmp -x*.log -xThumbs.db来忽略不需要备份的临时文件。

添加时间戳到增量包名

可以使用-ag自动附加当前日期,这样每天的增量包是独立的,不会相互覆盖。例如:-agYYYYMMDD会生成inc_20260509.rar。这样便于按日期恢复。

batch

rar u -r -agYYYYMMDD -ep1 %BACKUP_DIR%\inc_.rar %SOURCE_DIR%

文件名中的下划线后会被日期填充,所以要写“inc_.rar”。

自动清理旧备份的两种方法

备份策略必须包含老化机制。

方法一:使用forfiles删除N天前的文件

batch

forfiles /p “%BACKUP_DIR%” /m “*.rar” /d -30 /c “cmd /c del @path”

解释:删除修改日期超过30天的所有rar文件。注意这会把全量备份和增量备份都删掉。如果希望保留每周的全量,可以单独处理命名模式。

方法二:保留最近N个文件(按文件名排序)

batch

for /f “skip=30” %%a in (‘dir /b /o-d %BACKUP_DIR%\*.rar’) do del “%BACKUP_DIR%\%%a”

解释:按日期倒序排列,跳过前30个(最新),删除其余。需要确保文件名以日期开头。

更精细的策略:保留每周全量,删除旧增量

全量备份文件命名包含full_,增量包含inc_。在清理脚本中分别处理:

batch

:: 删除超过30天的增量forfiles /p “%BACKUP_DIR%” /m “inc_*.rar” /d -30 /c “cmd /c del @path”:: 删除超过180天的全量forfiles /p “%BACKUP_DIR%” /m “full_*.rar” /d -180 /c “cmd /c del @path”

完整备份脚本示例(带日志)

下面是一个可以直接保存为backup.bat的完整脚本。

batch

@echo offset SOURCE=D:\重要资料set DEST=E:\Backupset LOG=%DEST%\backup_log.txtset DATE=%date:~0,4%%date:~5,2%%date:~8,2%echo %DATE% %time% 开始备份 >> %LOG%:: 全量备份(每周一执行)或增量备份if %date:~0,1%==1 ( :: 假设周一为1,可根据实际情况调整    echo 执行每周全量备份 >> %LOG%    rar a -r -m5 -ep1 -agYYYYMMDD -x*.tmp %DEST%\full_.rar %SOURCE%) else (    echo 执行每日增量备份 >> %LOG%    rar u -r -ep1 -agYYYYMMDD -x*.tmp %DEST%\inc_.rar %SOURCE%):: 测试压缩包完整性(取最新生成的)for /f “delims=” %%i in (‘dir /b /od %DEST%\*.rar’) do set LATEST=%%irar t %DEST%\%LATEST% >> %LOG%:: 清理超过30天的增量备份forfiles /p “%DEST%” /m “inc_*.rar” /d -30 /c “cmd /c del @path” 2>>%LOG%:: 清理超过180天的全量备份forfiles /p “%DEST%” /m “full_*.rar” /d -180 /c “cmd /c del @path” 2>>%LOG%echo %DATE% %time% 备份完成 >> %LOG%

设置计划任务自动运行

打开Windows任务计划程序,创建基本任务。

触发器设置

每天运行一次,时间设为晚上22:00(此时电脑通常开机)

可以设置“如果任务运行时间超过3小时,强制停止”

操作设置

程序:C:\Windows\System32\cmd.exe

添加参数:/c “E:\Scripts\backup.bat”

起始于:E:\Scripts

高级选项

勾选“使用最高权限运行”,避免因文件权限问题备份失败。设置“如果过了计划开始时间,立即启动任务”。

常见问题与排错

增量备份包体积一直不增加,但源文件夹确实有新文件

检查rar u命令中的源路径是否以反斜杠结尾,以及-r是否包含子文件夹。另外,如果压缩包被其他程序占用,可能导致更新失败。

清理脚本误删了重要备份

建议先启用forfiles的/c中只使用echo进行测试,确认无误再改为del。另外,定期将备份复制到外部硬盘做离线保存。

命令行备份时提示“系统找不到指定路径”

检查目标文件夹是否存在。在脚本开头添加if not exist “%DEST%” mkdir “%DEST%”。

备份日志文件过大

可以在清理脚本中同时删除超过90天的日志文件。

增量备份的WinRAR压缩包能不能恢复出某个中间日期的文件?

由于WinRAR的u命令只往压缩包里添加更新版本的文件(覆盖旧版本),因此压缩包内只有每个文件的最新版本,无法回滚到3天前的版本。如果你需要保留历史版本,建议每天生成独立的增量包(使用-ag日期后缀),这样每个日期的包互不影响,恢复时选择对应日期的包即可。

备份脚本运行时弹出了WinRAR窗口,能不能完全静默?

可以使用-inul参数(禁止所有消息)和-idp(禁止进度百分比显示)。例如:rar a -inul -idp -r backup.rar source。再加入-cfg-忽略配置文件。这样就可以完全无窗口后台运行。

如果源文件夹中有文件被删除,WinRAR增量备份会从压缩包中删除它吗?

不会。rar u只增加和更新,从不删除。这意味着你的备份会保留已删除的文件,占用了不必要的空间。要同步删除,需要使用rar u -up参数(更新并清理旧文件)。但-up行为复杂,容易误删,建议手动定期重建全量备份。