![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-09 09:09 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 备份文件,并且只保留最近几次的备份 |
| 可打印版本 828 / 3 |
| 第1楼 lhkyzh | 发表于 2008-07-30 21:31 |
| 初级用户 发帖 12 积分 34 | |
|
备份文件,并且只保留最近几次的备份 小弟使用的数据库虽然有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行以外的,都全部删除? 谢谢大家 |
|
| 第2楼 HAT | 发表于 2008-07-30 21:46 |
| 版主 发帖 5,017 积分 9,023 | |
|
当小时的值是一位数的时候,前面会有一个空格,你取tokens=4当然会出问题啦。
|
|
| 第3楼 lhkyzh | 发表于 2008-07-31 23:54 |
| 初级用户 发帖 12 积分 34 | |
|
恍然大悟,谢谢HAT大哥! 我把文件夹名称换成了”7点49分_2008-07-24",DIR显示出来的内容是:
2008-07-24 07:49 <DIR> 7点49分_2008-07-24 我以为是第四列了,但是无法显示出这一行 |
|
| 第4楼 lhkyzh | 发表于 2008-08-01 00:39 |
| 初级用户 发帖 12 积分 34 | |
|
解决了,使用了一句 if /i %tm1% LSS 10 (set tm1=0%time:~1,1%)
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |