计划任务自动备份文件

计划任务自动备份文件 缩略图

这篇旧笔记原本只留下了一行命令,思路其实很实用:把需要保留的数据目录,通过 Windows 的计划任务定时复制到另一个磁盘,并且按日期生成一个独立备份文件夹。这样即使当天误删、误改了文件,也能回到前几天的版本。

原始写法是:

xcopy.exe d:data e:a\%date:~0,10% /s /e /h /y

这行命令在当年能解决问题,但现在重新看,最好写得更严谨一点。比如 d:data 容易被 Windows 理解成 D 盘当前目录下的相对路径,不如明确写成 D:\data;目标目录也建议加上引号,避免路径里有空格时报错。

一、这条命令到底做了什么

把它整理成更标准的写法,大概是这样:

xcopy "D:\data\*" "E:\a\%date:~0,10%\" /s /e /h /y /i /c /r

各参数的含义:

  • D:\data\*:要备份的源目录。
  • E:\a\%date:~0,10%\:备份目标目录,用当天日期作为文件夹名。
  • /s:复制子目录,但不复制空目录。
  • /e:连空目录也一起复制。
  • /h:复制隐藏文件和系统文件。
  • /y:遇到同名文件时不再询问,直接覆盖。
  • /i:目标不存在时默认按目录处理。
  • /c:遇到单个文件错误时继续复制后面的文件。
  • /r:允许覆盖只读文件。

二、推荐保存成 BAT 文件

新建一个文本文件,比如 backup-data.bat,内容可以写成下面这样:

@echo off
setlocal

set "SOURCE=D:\data"
set "BACKUP_ROOT=E:\a"

set "TODAY=%date:~0,10%"
set "TODAY=%TODAY:/=-%"
set "TARGET=%BACKUP_ROOT%\%TODAY%"

if not exist "%TARGET%" mkdir "%TARGET%"

xcopy "%SOURCE%\*" "%TARGET%\" /s /e /h /y /i /c /r

echo [%DATE% %TIME%] backup from "%SOURCE%" to "%TARGET%" finished.>> "%BACKUP_ROOT%\backup.log"

endlocal

这版比原始命令多做了几件事:源目录和目标根目录都集中写在前面,后面要改路径时更清楚;日期里的斜杠会被替换成横杠,避免生成非法目录名;每次执行后会写一行日志,方便以后判断计划任务有没有真的跑起来。

三、怎么添加到计划任务

在 Windows 里打开“任务计划程序”,可以按这个流程设置:

  1. 打开开始菜单,搜索“任务计划程序”,或者运行 taskschd.msc
  2. 选择“创建基本任务”,名称可以写“每日自动备份 data”。
  3. 触发器选择“每天”,时间建议放在电脑开机且不忙的时候,比如晚上 23:30。
  4. 操作选择“启动程序”,程序路径选择刚才保存的 backup-data.bat
  5. 如果是服务器或长期运行的电脑,可以勾选“使用最高权限运行”。
  6. 保存后先右键任务,点“运行”,确认能正常生成当天备份目录。

如果是比较老的 Windows XP,可以在控制面板里找“计划任务”,新建任务后同样选择这个 BAT 文件,设置每天运行即可。

四、Windows 7 以后更推荐 Robocopy

xcopy 简单直接,但遇到大量文件、网络目录、错误重试时不够稳。Windows 7、Windows 10、Windows 11 和 Windows Server 环境里,更推荐用 robocopy

@echo off
setlocal

set "SOURCE=D:\data"
set "BACKUP_ROOT=E:\a"

for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd"') do set "TODAY=%%i"
set "TARGET=%BACKUP_ROOT%\%TODAY%"

robocopy "%SOURCE%" "%TARGET%" /E /COPY:DAT /DCOPY:DAT /R:2 /W:5 /XJ /LOG+:"%BACKUP_ROOT%\backup.log"

if %ERRORLEVEL% LEQ 7 exit /b 0
exit /b %ERRORLEVEL%

robocopy 的优势是日志更完整、出错重试更可控,也更适合复制大目录。这里没有使用 /MIR,因为 /MIR 会镜像删除目标目录中源目录不存在的文件。做日常备份时,如果不清楚后果,不建议轻易开启。

五、几个容易踩坑的地方

  • 路径一定要写完整,比如 D:\data,不要写成 d:data
  • 路径外面尽量加英文双引号,尤其是目录名里有空格时。
  • 备份盘最好不要和源数据在同一个物理硬盘上,否则硬盘坏了源文件和备份会一起丢。
  • 如果目标是 NAS 或共享目录,优先用 \\服务器\共享名\backup 这种 UNC 路径,不要依赖登录后才映射出来的盘符。
  • 数据库、虚拟机、邮件客户端数据这类正在写入的文件,不建议只靠复制目录解决,最好先导出或停止服务再备份。
  • 定期清理太旧的备份目录,否则每天一份很快会把目标磁盘写满。

六、备份不是结束,能恢复才算数

自动备份设置好之后,至少要做一次恢复测试:随便找一个不重要的小文件,确认它真的出现在目标目录里;再把它复制回临时目录打开看看。很多备份方案看起来每天都在运行,真正出事时才发现权限不对、路径不对、复制的是空目录,那就太晚了。

这类 BAT + 计划任务的方案不算高级,但胜在简单、透明、容易排查。对个人电脑、小型工作机、老服务器来说,只要路径写清楚、日志留好、偶尔检查一次恢复结果,就已经能避免很多低级的数据损失。