![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 18:46 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » (已结)如果在WINDOWS下DOS命令行删除N天以前的文件 |
| 可打印版本 28,319 / 39 |
| 第1楼 songyujob | 发表于 2005-08-25 10:47 |
| 初级用户 发帖 6 积分 25 | |
|
(已结)如果在WINDOWS下DOS命令行删除N天以前的文件 请教:如果在WINDOWS下DOS命令行删除N天以前的某些文件?谢谢!
---------- Edited by willsort ---------- 解决方案如下(总的解题方向在9楼): 1、set /a将日期与相对天数进行相互换算,以求得差值日期(22楼); 2、每日运行以不断更新日期列表,取列表前的最早日期为差值日期(11楼); 3、采用第三方工具进行差值日期的获取与比较(zybird,17、19楼); 另外,删除固定日期前文件的代码也已完成(Climbing,13楼)。 ---------- Edited by willsort ---------- [ Last edited by willsort on 2005-9-2 at 15:35 ] |
|
| 第2楼 songyujob | 发表于 2005-08-25 11:30 |
| 初级用户 发帖 6 积分 25 | |
|
没人知道吗?
|
|
| 第3楼 willsort | 发表于 2005-08-25 11:36 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re songyujob:
请告知你使用的Windows的版本。另外,请说明N天以前是特指的某些日期,还是通指的前N天? |
|
| 第4楼 Climbing | 发表于 2005-08-25 12:06 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
我反问楼主一下,知道如何提问吗?
我的签名中有答案。 |
|
| 第5楼 songyujob | 发表于 2005-08-25 13:48 |
| 初级用户 发帖 6 积分 25 | |
Originally posted by willsort at 2005-8-25 11:36: 是命令执行时间点时 前N天的文件,比如删除8天前的所有文件。是通指8天前,没有具体指是哪些文件! windows 2000 server or windows 2003 server 3KS!! [ Last edited by songyujob on 2005-8-25 at 13:51 ] |
|
| 第6楼 songyujob | 发表于 2005-08-25 13:52 |
| 初级用户 发帖 6 积分 25 | |
Originally posted by Climbing at 2005-8-25 12:06: 不好意思!首先BS你这样的人,说话酸溜溜的,你以为你是谁呀! [ Last edited by songyujob on 2005-8-25 at 13:53 ] |
|
| 第7楼 Climbing | 发表于 2005-08-25 17:19 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
话都已经骂出口了,还有什么不好意思的。我不是谁,但至少在论坛里比你懂规矩的多。我倒可以反问你:你以为你是谁?
说话酸溜溜是个人的风格,试问我说错了什么?是不是想帮助你解决问题呢? |
|
| 第8楼 Climbing | 发表于 2005-08-25 17:38 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
我试了一下,这个命令对楼主解决问题是有帮助的:
for /f "tokens=*" %f in ('dir /b/s') do @if %~tf LSS 2005-08-17 echo %~tf %f |
|
| 第9楼 willsort | 发表于 2005-08-25 18:47 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re songyujob:
先发解题思路,具体代码限于个人原因可能需要等几天。 1、使用日期计算:计算得到有效的应保留的文件的七天日期,然后对应每个文件的日期进行判断;日期计算可以采用专门的第三方程序,比如date,也可以用set /a进行计算,不过在计算年与月的进位时可能会遇到一些麻烦。 2、使用日期标记:首先建立从今天起前7个日期的标记,可能是文件,也可能是环境变量。然后在程序执行开始时,判断这些标记是否在今天被更新,如果未被更新则建立今天的标记,删除最早期的标记,如果更新则跳过此步;然后判断要处理的文件日期是否匹配这些标记,如果匹配则保留,否则删除。 |
|
| 第10楼 songyujob | 发表于 2005-08-26 10:37 |
| 初级用户 发帖 6 积分 25 | |
|
其实在AIX系统上很容易实现,find .... -mtime +N,所以突发奇想在WINDOWS服务器上来自动实现对DB2归档日志的删除,看来要写个小程序实现了,用DOS带的命令会比较困难些!
[ Last edited by songyujob on 2005-8-26 at 10:39 ] |
|
| 第11楼 willsort | 发表于 2005-08-26 12:06 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re songyujob:
按思路2整理出的代码,需要你做全面的测试。 [ Last edited by willsort on 2005-8-26 at 19:18 ] |
|
| 第12楼 songyujob | 发表于 2005-08-26 13:51 |
| 初级用户 发帖 6 积分 25 | |
|
非常感谢!非常!
|
|
| 第13楼 Climbing | 发表于 2005-08-26 18:04 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
Re willsort:
你的批处理是不是每次运行前都要调整一下保留日期列表呢?如果是这样,那就太麻烦了,还不如我前面那一条命令来得简洁。 示例:假设今天是8月26日,我要删除2天以前的文件,也就是删除8月23日以前的文件,目标目录是d:\arch,那么用法如下: DelOldFile 2005-08-23 d:\arch 在Windows 2003的cmd下测试通过。 后记: 经WillSort兄提点,可以将上面的批处理中for /f那一行修改为: 效果是一样的。 [ Last edited by Climbing on 2005-8-26 at 21:38 ] |
|
| 第14楼 JonePeng | 发表于 2005-08-26 19:00 |
| 金牌会员 发帖 1,883 积分 4,562 来自 广东广州 | |
Originally posted by Climbing at 2005-8-25 17:38: 强啊!!! |
|
| 第15楼 willsort | 发表于 2005-08-26 19:17 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re Climbing:
我在11楼的程序首次运行时需要调整代码中的日期列表,此后需要每日运行一次以自动更新 %TEMP%.\_DateDel.bat 中的日期列表,其中 :Update 段的代码便是用来实现这一任务的。所以它适用于每日运行的批处理程序中。 发帖后不久,我就注意到忘记将每日运行加入程序注意事项中,只是忙于探索实现思路1的方案,以便一同发出,所以迟迟未改。现在,就在原代码上加上新的注意事项。 至于你写的代码,我现在还没有看明白你使用 for /f "tokens=*" 而非 for /r 的用意所在,可以解释一下吗? [ Last edited by willsort on 2005-8-26 at 19:33 ] |
|
| 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |