电脑上重要数据一定要做备份,万一哪天硬盘突然挂了,恢复数据的费用可是很高的。
我的电脑有2块硬盘,以下脚本是将硬盘一(D盘)上的重要数据,定时备份到硬盘二(E盘)上。将以下脚本保存为bat格式,然后Windows计划任务添加一个计划任务定期执行即可。
@echo off
:: 获取当前年月
for /f "tokens=2 delims==" %%i in ('"wmic os get localdatetime /value"') do set datetime=%%i
set year=%datetime:~0,4%
set month=%datetime:~4,2%
set backupdir=E:\Backup\%year%-%month%
:: 创建目标文件夹(如果不存在)
if not exist "%backupdir%" (
mkdir "%backupdir%"
)
:: 备份 D:\重要资料
robocopy "D:\重要资料" "%backupdir%\重要资料" /E /COPYALL /R:3 /W:5 /LOG+:"%backupdir%\backup_log.txt"
:: 备份 D:\超级重要资料
robocopy "D:\超级重要资料" "%backupdir%\超级重要资料" /E /COPYALL /R:3 /W:5 /LOG+:"%backupdir%\backup_log.txt"
:: 备份 D:\超级超级重要资料
robocopy "D:\超级超级重要资料" "%backupdir%\超级超级重要资料" /E /COPYALL /R:3 /W:5 /LOG+:"%backupdir%\backup_log.txt"
:: 提示完成
echo Backup completed on %date% at %time%
脚本逻辑解析
1. 获取当前年月
for /f "tokens=2 delims==" %%i in ('"wmic os get localdatetime /value"') do set datetime=%%i
set year=%datetime:~0,4%
set month=%datetime:~4,2%
set backupdir=E:\Backup\%year%-%month%
- 使用
wmic os get localdatetime /value获取系统时间,格式通常为YYYYMMDDhhmmss...。 set year=%datetime:~0,4%→ 截取前4位作为年份。set month=%datetime:~4,2%→ 截取第5-6位作为月份。- 拼接成目标备份目录:
E:\Backup\2025-12。
2. 创建目标文件夹
if not exist "%backupdir%" (
mkdir "%backupdir%"
)
- 如果目录不存在,则新建。
- 确保备份不会因目录缺失而失败。
3. 使用 Robocopy 进行备份
robocopy "D:\重要资料" "%backupdir%\重要资料" /E /COPYALL /R:3 /W:5 /LOG+:"%backupdir%\backup_log.txt"
- 源目录:
D:\重要资料 - 目标目录:
E:\Backup\YYYY-MM\重要资料 参数说明:
/E→ 复制所有子目录,包括空目录。/COPYALL→ 复制所有文件属性(包括安全权限、时间戳等)。/R:3→ 遇到错误时重试 3 次。/W:5→ 每次重试间隔 5 秒。/LOG+:"..."→ 将日志追加写入backup_log.txt。
同样的逻辑应用到 D:\超级重要资料 和 D:\超级超级重要资料。
4. 提示完成
echo Backup completed on %date% at %time%
- 在命令行输出完成提示,显示日期和时间。