win10使用Bat脚本主动化定时备份文件、删除特定文件和文件夹

[复制链接]
发表于 2026-10-3 11:16:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

Oracle 数据文件、业务目录要定期备份,还得定期清掉老备份免得把磁盘撑爆。Windows 上最省事的方案:两个 .bat + 任务计划程序。一个负责备份,一个负责删三天前的目录, scheduled 起来就全自动了。

一、备份脚本

存成 D:\sql\oracle\win-backup.bat:

@echo off
setlocal enabledelayedexpansion

:: 设置字符集为 UTF-8,控制台才能正常显示中文
chcp 65001

:: 源文件夹和目标文件夹
set "source_folder=D:\sql\oracle\oracle文档"
set "destination_folder=D:\sql\oracle\win-backup"

:: 目标文件夹不存在就创建
if not exist "%destination_folder%" mkdir "%destination_folder%"

:: 取当前日期时间,用来做备份目录名
for /f "tokens=2 delims==" %%a in ('wmic OS Getlocaldatetime /value') do set "dt=%%a"
set "YY=!dt:~2,2!"  & set "YYYY=!dt:~0,4!"
set "MM=!dt:~4,2!"  & set "DD=!dt:~6,2!"
set "HH=!dt:~8,2!"  & set "Min=!dt:~10,2!"
set "Sec=!dt:~12,2!"

set "backup_folder=%destination_folder%\%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"

:: 创建备份文件夹
mkdir "!backup_folder!"

:: 用 xcopy 复制文件夹及其内容
xcopy /E /I /Y "%source_folder%" "!backup_folder!\"

echo Backup completed: !backup_folder!

endlocal
pause

几个关键点

  • setlocal enabledelayedexpansion + !变量!:循环体里改变量必须开延迟扩展,不然读到的是旧值;
  • chcp 65001:让控制台正确显示中文,缺了会乱码;
  • wmic OS Getlocaldatetime /value 取出来的串形如 20261003104512.xxxxxx+xxx,靠字符串切片 !dt:~0,4! 这种截取年月日时分秒;
  • xcopy /E /I /Y:E 含空目录、I 目标是目录时按目录处理、Y 覆盖不确认,全自动场景这三个都得带。

二、删除备份脚本

存成 D:\sql\oracle\win-delete.bat,删掉三次备份之前的目录:

@echo off
setlocal
chcp 65001

:: 备份文件夹路径
set "backup_folder=D:\sql\oracle\win-backup"

:: 调 PowerShell 删三天前的目录
powershell -Command "$limit_date=(Get-Date).AddDays(-3); Get-ChildItem -Path '%backup_folder%' -Directory -Recurse | Where-Object { $_.LastWriteTime -lt $limit_date } | Remove-Item -Recurse -Force; Write-Host 'Deleted backup folders older than 3 days.'"

echo Deleted backup folders older than 3 days.

endlocal
pause

核心就一句 PowerShell:算出三天前的时间点,Get-ChildItem 列出目录、按 LastWriteTime 过滤、超期的 Remove-Item -Recurse -Force 删掉。时间戳用 LastWriteTime 判断比按目录名解析日期稳妥。

三、挂定时任务

步骤 1:打开任务计划程序

右键 win10「此电脑」→ 管理 → 计算机管理 → 任务计划程序。

步骤 2:建文件夹

任务计划程序库 → 右键新建文件夹,命名 mywinbackup(方便归类一眼看到)。

步骤 3:建备份任务

  • 常规:名称自定义,勾使用最高权限运行(备份 Oracle 目录需要权限);
  • 触发器 → 新建触发器,按需要设每天几点执行;
  • 操作 → 新建操作,程序选上面建的 .bat,「起始于」填该 bat 所在目录(不填的话脚本里相对路径会跑偏);
  • 设置:勾选「过了操作开始时间,立刻执行」,最后确定。

步骤 4:删备份任务

同上,完全一样的操作再来一遍——指到 win-delete.bat 就行。

四、踩坑提醒

  • 批处理里中文乱码:文件保存编码要和 chcp 对上,UTF-8 保存 + chcp 65001;老记事本默认 ANSI,会显示成方块。
  • 脚本双击能跑、定时任务跑不动:八成是「起始于」路径没填,或者没勾最高权限。
  • 备份目录名带空格导致解析出错:全程 "%变量%" 加引号,别偷懒。
  • 删太快没留回滚机会:生产环境把 -3 天改长一点(7 或 14),先观察一段时间。
  • 别在 bat 里留 pause:定时任务执行时不会有交互窗口,pause 会让进程挂在那儿。

总结

Windows 定时备份方案就两块:一个 xcopy /E /I /Y 的备份 bat(目录名按时间戳自动带日期),一个调 PowerShell 按 LastWriteTime 删老目录的 bat,再用任务计划程序挂起来,记得勾「最高权限运行」和填「起始于」。删之前先放宽保留天数,真出事还有窗口。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表