中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]批处理删除目录中除最新文件以外的所有文件
作者:
标题: [已结]批处理删除目录中除最新文件以外的所有文件 上一主题 | 下一主题
prett
新手上路





积分 3
发帖 3
注册 2008-12-19
状态 离线
『楼 主』:  [已结]批处理删除目录中除最新文件以外的所有文件

RT
例如一些应用软件会定期备份用户文件到指定的目录里,并在备份名后面加上时间信息:
backupfile 2008-12-10 11-00.bkf
backupfile 2008-12-10 23-00.bkf
backupfile 2008-12-11 11-00.bkf
backupfile 2008-12-11 23-00.bkf
backupfile 2008-12-12 11-00.bkf
backupfile 2008-12-12 23-00.bkf
backupfile 2008-12-13 11-00.bkf
backupfile 2008-12-13 23-00.bkf
……
时间长了这些文件也会很多,我想实现删除那些老的文件,只保留最新的一个,请各位帮忙看看有没有办法。谢谢!

[ Last edited by HAT on 2008-12-22 at 12:18 ]

2008-12-20 15:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

文件名是不允许包含半角冒号的,你的这些文件是怎样命名成功的?



2008-12-20 19:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
prett
新手上路





积分 3
发帖 3
注册 2008-12-19
状态 离线
『第 3 楼』:  

不好意思那名字是为了表述问题手工写上的,忘了这码事了,其实应用中文件名不是这样的。
马上更正。

[ Last edited by prett on 2008-12-21 at 09:15 ]

2008-12-21 09:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 4 楼』:  

如果显示符合要求,请把del前的echo去掉以实现文件的删除...

  Quote:

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.bkf) do (
  4.   set "str=%%~na"
  5.   set /a n+=1,m=n-1
  6.   set "_!n!=%%a"
  7.   for /f "tokens=3-6 delims=- " %%b in ("!str!") do (set "var=%%b%%c%%d%%e")
  8.   if !var! gtr !file_! (
  9.     set "file_=!var!"
  10.     if defined _!m! (call echo del "%%_!m!%%")
  11.   ) else (
  12.     echo del "%%a"
  13.     call set "_!n!=%%_!m!%%"
  14.   )
  15. )
  16. echo.这是要保留的文件:"!_%n%!"
  17. pause
        moniuming发表于:  2008-12-21  14:11

[ Last edited by moniuming on 2008-12-21 at 14:38 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 kissbill 分数: +2  时间:2008-12-21 20:43


2008-12-21 12:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  

只保留最新的一个
前提是你文件名时间、日期若是单数时,得这样 2008-01-05 09-30
@echo off
for /f "delims=" %%a in ('dir/b *.bkf^|sort /r') do (
   if defined flag del/q "%%a"
   set flag=a
)
pause


   此帖被 +7 点积分      点击查看详情   
评分人:【 moniuming 分数: +5  时间:2008-12-21 20:12
评分人:【 kissbill 分数: +2  时间:2008-12-21 20:43




致精致简!
2008-12-21 18:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
prett
新手上路





积分 3
发帖 3
注册 2008-12-19
状态 离线
『第 6 楼』:  

按照我的需求,已经测试通过了,非常感谢各位帮忙!

2008-12-22 11:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slnt
新手上路





积分 4
发帖 8
注册 2008-12-29
状态 离线
『第 7 楼』:  

找了半天了 终于找到了啊

2009-1-6 13:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
creda
新手上路





积分 12
发帖 10
注册 2008-12-30
状态 离线
『第 8 楼』:  

4楼的,你那个会吧所有文件都删除了,只留了个批处理文件

2009-1-6 15:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
creda
新手上路





积分 12
发帖 10
注册 2008-12-30
状态 离线
『第 9 楼』:  

5楼的成功

2009-1-6 15:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: