![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 13:03 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何删除指定目录里,一个礼拜以前的文件。 |
| 可打印版本 2,106 / 19 |
| 第1楼 holyunicorn | 发表于 2009-02-24 12:12 |
| 初级用户 发帖 14 积分 24 | |
|
如何删除指定目录里,一个礼拜以前的文件。 我原来用这个命令,来保留最近7个备份,但对archivelog,则用不了,因为我不知道每天产生的文件数目。
for /f "skip=7" %%i in ('dir F:\mybackup\*.dmp /tc /o-d /b') do del %%i 我希望达到的目的是,每天删除过期的archivelog,使当前目录里的archivelog文件只保留一个礼拜以内生成的。 请给几句关键的命令,谢谢。 ——————————————————————— 转移自 DOS疑难解答 & 问题讨论 (解答室) 今后发帖请尽量发到对应的版块。 ——管理员 ——————————————————————— |
|
| 第2楼 HAT | 发表于 2009-02-24 16:11 |
| 版主 发帖 5,017 积分 9,023 | |
|
这个不是几个命令能搞定的,需要一大段代码。
可以到批处理室搜索“删除N天以前的文” |
|
| 第3楼 holyunicorn | 发表于 2009-02-24 17:00 |
| 初级用户 发帖 14 积分 24 | |
|
谢谢,我去翻一下
|
|
| 第4楼 holyunicorn | 发表于 2009-02-24 17:48 |
| 初级用户 发帖 14 积分 24 | |
|
看过了,发现论坛里牛人真多,不得不拜一下。但那个set /a的算法,看的我有点晕,我要好好理解下。
我记得以前看过一个用VBS 的 dateadd做的脚本,这里有吗,给个链接吧。 谢谢 |
|
| 第5楼 HAT | 发表于 2009-02-24 19:08 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 4楼 调用VBS进行日期计算确实比较简单,在VBS帮助手册里面搜索一下data相关的函数,自己就能写出来,不必参考别人的代码。
|
|
| 第6楼 Michael | 发表于 2009-02-24 20:18 |
| 钻石会员 发帖 3,041 积分 10,056 | |
|
我也写过一个,不过有一次,单位放假,服务器7天没开,结果一运行脚本,只剩一个备份了。所以,保留最近7个,不能单单以日期判断!
[ Last edited by Michael on 2009-2-24 at 20:20 ] |
|
| 第7楼 holyunicorn | 发表于 2009-02-25 12:02 |
| 初级用户 发帖 14 积分 24 | |
|
保留最近7个的备份,还是用我上面的那个命令比较好,不容易误删
|
|
| 第8楼 HAT | 发表于 2009-02-25 12:56 |
| 版主 发帖 5,017 积分 9,023 | |
但对archivelog,则用不了,因为我不知道每天产生的文件数目。 具体问题具体分析吧 不管怎样 要放在服务器上代码还是考虑全面一些好 |
|
| 第9楼 holyunicorn | 发表于 2009-02-26 09:54 |
| 初级用户 发帖 14 积分 24 | |
|
没人给我答案,只能自力更生了.参考了点代码,写了两个批处理.一个在xp下运行,一个在windows2000下运行.
|
|
| 第10楼 holyunicorn | 发表于 2009-02-26 09:55 |
| 初级用户 发帖 14 积分 24 | |
|
在xp下运行
@echo off setlocal enabledelayedexpansion mshta vbscript:createobject("scripting.filesystemobject").opentextfile("outputdate",2,true).writeline(dateadd("d",-7,"%date:~0,10%"))(window.close) for /f "tokens=1-3 delims=- " %%1 in (outputdate) do (set y=%%1 if %%2 leq 9 (set m=0%%2)else set m=%%2 if %%3 leq 9 (set d=0%%3)else set d=%%3) del=outputdate& set lastdate=%y%-%m%-%d% for %%1 in (c:\a\*)do (set createdate=%%~t1 set createdate=!createdate:~0,10! if !createdate! lss !lastdate! del /a /f "%%~1") |
|
| 第11楼 holyunicorn | 发表于 2009-02-26 09:56 |
| 初级用户 发帖 14 积分 24 | |
|
在windows2000下运行
@echo off setlocal enabledelayedexpansion mshta vbscript:createobject("scripting.filesystemobject").opentextfile ("outputdate",2,true).writeline(dateadd("d",-7,"%date:~4,10%")) (window.close) for /f "tokens=1" %%1 in (outputdate) do (set lastdate=%%1) del=outputdate& set lastdate=%lastdate:~2,8% for %%1 in (c:\a\*)do (set createdate=%%~t1 set createdate=!createdate:~0,8! if !createdate! lss !lastdate! del /a /f "%%~1") |
|
| 第12楼 holyunicorn | 发表于 2009-02-26 10:02 |
| 初级用户 发帖 14 积分 24 | |
|
分为两个批处理的原因是,在两种系统下,%date:~0,10%的格式不一样,%%~t1的格式也不一样,dateadd出来的结果也不同.
哪位能告诉我,怎么才能把两个系统的date格式调一致,我调整了windows区域管理里的日期格式,发现没有任何用处. 谢谢 |
|
| 第13楼 HAT | 发表于 2009-02-26 11:53 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 12楼 批处理标准化获取当前系统日期
http://www.cn-dos.net/forum/viewthread.php?tid=41857 |
|
| 第14楼 holyunicorn | 发表于 2009-02-26 21:43 |
| 初级用户 发帖 14 积分 24 | |
Originally posted by HAT at 2009-2-26 11:53: 谢谢,马上去看下 ![]() |
|
| 第15楼 holyunicorn | 发表于 2009-02-27 00:25 |
| 初级用户 发帖 14 积分 24 | |
|
呵呵,又学到点东西,原来还可以这样做,不过为了获得标准日期,竟然每取一次日期,就要修改2次注册表。最后那个更厉害,直接用debug,我前天就是想用debug生成一个关于日期的com程序,结果把cmd给搞乱了。这样做,我觉得危险系数还是蛮大的。
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |