Board logo

标题: [已结]批处理删除目录中除最新文件以外的所有文件 [打印本页]

作者: prett     时间: 2008-12-20 15:04    标题: [已结]批处理删除目录中除最新文件以外的所有文件

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 ]

作者: HAT     时间: 2008-12-20 19:58
文件名是不允许包含半角冒号的,你的这些文件是怎样命名成功的?

作者: prett     时间: 2008-12-21 09:14
不好意思那名字是为了表述问题手工写上的,忘了这码事了,其实应用中文件名不是这样的。 马上更正。 [ Last edited by prett on 2008-12-21 at 09:15 ]

作者: moniuming     时间: 2008-12-21 12:34
如果显示符合要求,请把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 ]

作者: 26933062     时间: 2008-12-21 18:27
只保留最新的一个 前提是你文件名时间、日期若是单数时,得这样 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

作者: prett     时间: 2008-12-22 11:43
按照我的需求,已经测试通过了,非常感谢各位帮忙!

作者: slnt     时间: 2009-1-6 13:15
找了半天了 终于找到了啊

作者: creda     时间: 2009-1-6 15:47
4楼的,你那个会吧所有文件都删除了,只留了个批处理文件

作者: creda     时间: 2009-1-6 15:49
5楼的成功