中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 02:42
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]批处理删除目录中除最新文件以外的所有文件 查看 1,144 回复 8
楼 主 [已结]批处理删除目录中除最新文件以外的所有文件 发表于 2008-12-20 15:04 ·  中国 河北 秦皇岛 联通
新手上路
积分 3
发帖 3
注册 2008-12-19 12:08
17年会员
UID 134333
性别 男
状态 离线
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 ]
2 发表于 2008-12-20 19:58 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
文件名是不允许包含半角冒号的,你的这些文件是怎样命名成功的?
3 发表于 2008-12-21 09:14 ·  中国 河北 秦皇岛 联通
新手上路
积分 3
发帖 3
注册 2008-12-19 12:08
17年会员
UID 134333
性别 男
状态 离线
不好意思那名字是为了表述问题手工写上的,忘了这码事了,其实应用中文件名不是这样的。
马上更正。

[ Last edited by prett on 2008-12-21 at 09:15 ]
4 发表于 2008-12-21 12:34 ·  中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
如果显示符合要求,请把del前的echo去掉以实现文件的删除...



  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 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
kissbill +2 2008-12-21 20:43
5 发表于 2008-12-21 18:27 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
只保留最新的一个
前提是你文件名时间、日期若是单数时,得这样 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
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
moniuming +5 2008-12-21 20:12
kissbill +2 2008-12-21 20:43
致精致简!
6 发表于 2008-12-22 11:43 ·  中国 河北 秦皇岛 联通
新手上路
积分 3
发帖 3
注册 2008-12-19 12:08
17年会员
UID 134333
性别 男
状态 离线
按照我的需求,已经测试通过了,非常感谢各位帮忙!
7 发表于 2009-01-06 13:15 ·  中国 广东 深圳 宝安区 电信
新手上路
积分 4
发帖 8
注册 2008-12-29 19:44
17年会员
UID 135287
性别 男
状态 离线
找了半天了 终于找到了啊
8 发表于 2009-01-06 15:47 ·  中国 浙江 绍兴 电信
新手上路
积分 12
发帖 10
注册 2008-12-30 18:19
17年会员
UID 135372
性别 男
状态 离线
4楼的,你那个会吧所有文件都删除了,只留了个批处理文件
9 发表于 2009-01-06 15:49 ·  中国 浙江 绍兴 电信
新手上路
积分 12
发帖 10
注册 2008-12-30 18:19
17年会员
UID 135372
性别 男
状态 离线
5楼的成功
论坛跳转: