Windows批处理MySQL备份脚本如何仅保留最近10个备份文件夹
解决方案
你只需要在原有备份逻辑执行完成后,新增一段按时间排序、删除超出10个的最早备份目录的逻辑即可,修改后的完整脚本如下:
@echo off Title Get FileName With Date and Time Call :GetFileNameWithDateTime MyCurrentDate echo %MyCurrentDate% cd backups MkDir %MyCurrentDate% cd .. cd bin mysqldump.exe -u -p --single-transaction --routines --triggers --host test.com --databases database1 > "../backups/%MyCurrentDate%/testBackup.sql" cd .. :: 以下为新增的旧备份清理逻辑 cd backups :: 列出所有备份目录,按创建时间倒序排列,跳过最新的10个,剩余的全部强制删除 for /f "skip=10 delims=" %%d in ('dir /ad /b /o-d') do rd /s /q "%%d" cd .. pause & exit ::---------------------------------------------------------------------------------- :GetFileNameWithDateTime <FileName> for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set "MyDate=%%x" set "%1=%MyDate:~0,4%-%MyDate:~4,2%-%MyDate:~6,2%-%MyDate:~8,2%-%MyDate:~10,2%" Exit /B ::----------------------------------------------------------------------------------
改动说明
- 新增的清理逻辑核心是
dir /ad /b /o-d命令:/ad表示仅筛选目录,排除文件/b表示仅输出目录名称,不输出额外信息/o-d表示按创建时间倒序排列,最新的目录排在最前面
for /f "skip=10 delims=" %%d表示跳过前10行(也就是最新的10个备份目录),对后面的每一行(即早于第10个的备份目录)执行rd /s /q "%%d"强制删除目录和目录内的所有文件- 逻辑执行时会先切到backups目录下操作,避免误删其他路径的文件
内容的提问来源于stack exchange,提问作者Mads Sander Høgstrup
相关产品推荐
相关产品推荐

