Board logo

标题: 备份文件,并且只保留最近几次的备份 [打印本页]

作者: lhkyzh     时间: 2008-7-30 21:31    标题: 备份文件,并且只保留最近几次的备份

小弟使用的数据库虽然有sql自动备份,但有过一次无法恢复的经历,所以现在每天都选择手动备份,操作步骤多,还要经常检查磁盘的剩余空间,所以想找一个自动备份数据库,并且按照建立时间,删除掉以前备份的文件,只保留最近5次,研究了一段时间,写出下列批处理: rem @echo off ::/停止sql服务/ echo 正在停止PUBWIN服务... net stop "SQLSERVERAGENT">nul net stop "MSSQLSERVER">nul echo 正在备份数据库文件... ::/建立当前时间的备份目录/ Set dd=%date:~0,10% Set tm1=%time:~0,2% Set tm2=%time:~3,2% Set tt=%tm1%点%tm2%分 md "d:\数据库备份\%dd%_%tt%" ::/复制数据库到备份目录/ copy e:/database/ "d:\数据库备份\%dd%_%tt%\" ::/只保留最近三次备份的数据库 dir /o:-d d:\数据库备份>1.txt for /F "skip=10 tokens=4" %%a in (1.txt) do @if exist d:\数据库备份\%%a rd /s /q d:\数据库备份\%%a pause 前面一部分是停止服务的copy文件,后面自动删除旧备份这一些是借鉴前辈的文章,思路是先dir按由新到旧的时间显示d盘“数据库备份”这个文件夹,然后把结果输出到1.txt,然后分析1.txt,我的1.txt内容如下: ------------------------------分隔符----------------------------------------------- 驱动器 D 中的卷没有标签。 卷的序列号是 3886-56C7 d:\pubwin数据库备份 的目录 2008-07-30 20:20 <DIR> . 2008-07-30 20:20 <DIR> .. 2008-07-30 20:20 <DIR> 2008-07-30_20点20分 2008-07-30 20:19 <DIR> 2008-07-30_20点19分 2008-07-24 07:49 <DIR> 2008-07-24_ 7点49分 2008-07-24 07:47 <DIR> 2008-07-24_ 7点47分 2008-07-24 07:46 <DIR> 2008-07-24_ 7点46分 2008-07-24 07:44 <DIR> 2008-07-24_ 7点44分 2008-07-24 01:43 <DIR> 2008-07-24_ 1点43分 ------------------------------分隔符----------------------------------------------- for /F "skip=10 tokens=4" %%a in (1.txt) do @if exist d:\数据库备份\%%a rd /s /q d:\数据库备份\%%a 我想用这段命令 做到只保留最近三次备份, 所以了忽略前十行,然后删除掉前十行以外的文件夹,但实际的运行效果,它虽然可以删除十行以外多余的备份文件,但是不同日期创建的文件就删除不了,比如上面的例子,运行命令以后,它应该只能保留两个文件夹: 2008-07-30 20:20 <DIR> 2008-07-30_20点20分 2008-07-30 20:19 <DIR> 2008-07-30_20点19分 但实际上运行以后, 2008-07-24 07:49 <DIR> 2008-07-24_ 7点49分 2008-07-24 07:47 <DIR> 2008-07-24_ 7点47分 2008-07-24 07:46 <DIR> 2008-07-24_ 7点46分 2008-07-24 07:44 <DIR> 2008-07-24_ 7点44分 这几个依然存在,我把命令换成: for /F "skip=10 tokens=4" %%a in (1.txt) do @if exist d:\数据库备份\%%a echo d:\数据库备份\%%a 也显示不了10行以外的文件,所以向大家求助,怎么样可以做到不论日期,只要是10行以外的,都全部删除? 谢谢大家

作者: HAT     时间: 2008-7-30 21:46
当小时的值是一位数的时候,前面会有一个空格,你取tokens=4当然会出问题啦。

作者: lhkyzh     时间: 2008-7-31 23:54
恍然大悟,谢谢HAT大哥! 我把文件夹名称换成了”7点49分_2008-07-24",DIR显示出来的内容是: 2008-07-24 07:49 <DIR> 7点49分_2008-07-24 我以为是第四列了,但是无法显示出这一行

作者: lhkyzh     时间: 2008-8-1 00:39
解决了,使用了一句 if /i %tm1% LSS 10 (set tm1=0%time:~1,1%)