[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 如何修改以下批处理实现删除文件名中包含指定日期串的文件?

如何用批处文件删除N天前以日期规律命名的文件,文件的名字为 abc0116-0205.xls 2017-02-13 221047 或者 ef0123609-0123315.xls 2017-02-13 083946 ,就是文件的名字前部分长度什么的没有规律,后部分都 2017-02-13 083946 这样,年-月-日 时分秒,怎么用BAT文件来实现?
下面的例子只能删除bak-2009-12-25格式命名的文件,对我的这些不起作用,请高手帮忙解决下
  1. @echo off
  2. ::演示:删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件。
  3. ::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
  4. ::本例假设文件名中包含的日期字符串(比如:bak-2009-12-25.log)
  5. rem 指定待删除文件的存放路径
  6. set SrcDir=H:/Test1
  7. rem 指定天数
  8. set DaysAgo=5
  9. >"%temp%/DstDate.vbs" echo LastDate=date()-%DaysAgo%
  10. >>"%temp%/DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
  11. >>"%temp%/DstDate.vbs" echo wscript.echo FmtDate
  12. for /f %%a in ('cscript /nologo "%temp%/DstDate.vbs"') do (
  13.   set "DstDate=%%a"
  14. )
  15. set DstDate=%DstDate:~0,4% ^& %DstDate:~4,2% ^& %DstDate:~6,2%
  16. setlocal enabledelayedexpansion
  17. for /r "%SrcDir%" %%a in (*.*) do (
  18.     set "FileDate=%%~na"
  19.     set "FileDate=!FileDate:~4,10!"
  20.     if "!FileDate!" leq "%DstDate%" (
  21.         if exist "%%a" (
  22.             echo del /f /q "%%a"
  23.         )
  24.     )
  25. )
  26. endlocal
  27. pause
复制代码

请问各位高手,可以实现吗?

TOP

set "FileDate=%%~na"
set "FileDate=!FileDate:~4,10!"

改成:
set "FileDate=%%~nxa"
set "FileDat ...
GNU 发表于 2017-2-20 20:50



  谢谢,改成上面的的语句后,好像判断时间不对了,不管选择删除多少天前的内容,都是删除此文件夹下面所有这种格式的文件。

TOP

是不是别的地方也需要改啊?

TOP

回复 6# GNU


set DaysAgo=10 不管设定为几天,都是删除全部文件,麻烦帮忙给看下

TOP

回复 8# GNU


   换上面的代码,啥也删除不了。。。。。。。。。。。。改多少天都不管用

TOP

回复 10# GNU

TOP

回复 12# GNU

那就是说用脚本语言实现不了这个功能,就是日期前面字符没有规律

TOP

回复  yu2n



我是这样理解的,他顶楼说的是2个文件而不是4个文件。
GNU 发表于 2017-2-25 20:53



    楼上正解!我所有的的文件名字都是以xxxx-xx-xx xxxxxx 作为文件名的结尾, 即4位年,两位日和月,加一个空格后面是小时分钟和秒各两位,这是固定格式,但是文件 名的前半部分是没有任何规律的字符个数不确定

TOP

返回列表