中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 备份文件,并且只保留最近几次的备份
作者:
标题: 备份文件,并且只保留最近几次的备份 上一主题 | 下一主题
lhkyzh
初级用户





积分 34
发帖 12
注册 2006-6-4
状态 离线
『楼 主』:  备份文件,并且只保留最近几次的备份

小弟使用的数据库虽然有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行以外的,都全部删除? 谢谢大家


2008-7-30 21:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

当小时的值是一位数的时候,前面会有一个空格,你取tokens=4当然会出问题啦。




2008-7-30 21:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lhkyzh
初级用户





积分 34
发帖 12
注册 2006-6-4
状态 离线
『第 3 楼』:  

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


2008-7-31 23:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lhkyzh
初级用户





积分 34
发帖 12
注册 2006-6-4
状态 离线
『第 4 楼』:  

解决了,使用了一句 if /i %tm1% LSS 10 (set tm1=0%time:~1,1%)


2008-8-1 00:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: