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

[文本处理] 批处理如何删除指定文件夹下修改日期小于当前日期前一天(昨天)的文件?

本帖最后由 pcl_test 于 2016-7-16 14:21 编辑

领教了版主的批处理功力后,今天第二次来求救,呵。

大体情况如下:
在一个文件夹里,有若干个文件夹,命名规则是当前年份,如 2008 、2009、2010
每个文件夹里有以月份为文件夹名的文件夹,月份里则是天数的文件名,天数里才是最终的文件。
以一个文件为例 2009\10\14\不规则的文件名.jpg

要实现的效果:
每天运行一次批处理文件,删除文件创建时间 小于 当前时间减一天 的文件或文件夹。

不知小弟说的是否清楚。
实在想不到解决的方法,不知道各位版主、大侠们能否帮忙解决,万分感谢 ^_^

是不是最终只保留当天的文件或者文件夹?

TOP

你看看下面的代码行不行,修改一些前辈的代码给自己使用的。

同这个文件一起建一个NoDelFile.lst文本格式的文件,在这个文件里放一些你想保留的文件名即可做到忽略删除的功能。

NoDelFile.lst 文件内容如下:
  1. ::------------------该部分为脚本保留文件--------------------
  2. ::BySlovEnt
  3. ::如需临时忽略文件,只需在文件前加上:号,即可被脚本忽略保留而进行常规删除
  4. :Test.txt                -- 如果该文件存在,依旧会在符合条件的情况下被删除
  5. ::该文件内不支持任何形式的通配符
  6. ::如需注释文件,可以在文件后使用“空格”并加以说明,如下列
  7. CallBAT.bat
  8. DelFileDaysAgo.bat       -- 该文件为脚本核心文件,不能删除
  9. NoDelFile.lst            -- 该文件为脚本核心文件,不能删除
  10. DelFolderDaysAgo.bat     -- 该文件为脚本核心文件,不能删除
  11. NoDelFolder.lst          -- 该文件为脚本核心文件,不能删除
  12. ::---------------------请勿删除以上字段----------------------
  13. ::----------------以下为用户自定义文件名列表-----------------
复制代码


  1. @ECHO OFF
  2. :: 删除指定目录、指定天数之前(以文件的最后修改日期为准)的文件,并可排除NoDel文本文件中罗列的文件;
  3. :: 本代码调用了临时VBS代码进行日期计算;
  4. :: 为兼容不同的日期格式,调用REG命令(Win2003系统自带)统一设置日期格式,
  5. :: 处理完毕之后再把日期格式恢复成原来的状态。
  6. :: 使用方法示例:DelFileDaysAgo.bat Path Days ("DelFileDaysAgo.bat D:\CHENHUI\ 15" 删除所有D盘下CHENHUI文件夹中超过15天的文件)
  7. REM 指定待删除文件的存放路径
  8. SET SrcPath="%1"
  9. REM 指定天数
  10. SET Days="%2"
  11. REM 也可用以下方式直接设置变量
  12. :: SET SrcPath=D:\CHENHUI\
  13. REM 指定天数
  14. :: SET Days=15
  15. REM 备份日期
  16. >"%TEMP%\BackupDate.vbs" ECHO Set WshShell = WScript.CreateObject("WScript.Shell")
  17. >>"%TEMP%\BackupDate.vbs" ECHO WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Control Panel\International\sShortDate")
  18. FOR /F %%a IN ('cscript /nologo "%temp%\BackupDate.vbs"') DO (
  19.   SET "RegDateOld=%%a"
  20. )
  21. REM 设置日期为标准格式YYYY-M-D
  22. >"%TEMP%\UnifyDate.vbs" ECHO Set WshShell = WScript.CreateObject("WScript.Shell")
  23. >>"%TEMP%\UnifyDate.vbs" ECHO WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "yyyy-M-d", "REG_SZ"
  24. cscript /nologo "%TEMP%\UnifyDate.vbs"
  25. REM 进行日期计算
  26. >"%TEMP%\DstDate.vbs" ECHO LastDate=date()-%Days%
  27. >>"%TEMP%\DstDate.vbs" ECHO FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
  28. >>"%TEMP%\DstDate.vbs" ECHO wscript.echo FmtDate
  29. FOR /F %%a IN ('cscript /nologo "%temp%\DstDate.vbs"') DO (
  30.   SET "DstDate=%%a"
  31. )
  32. SET DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  33. FOR /F "EOL=: Tokens=1 Delims= " %%a IN (NoDelFile.lst) DO SET %%~a=a
  34. FOR /R "%SrcPath%" %%a IN (*) DO (
  35.   IF "%%~ta" LEQ "%DstDate%" (
  36.     IF EXIST "%%a" (
  37.        IF NOT Defined %%~nxa DEL /F /Q "%%a"
  38.                    )
  39.                               )
  40.                                   )
  41. REM 恢复系统日期格式
  42. >"%TEMP%\RecoverDate.vbs" ECHO Set WshShell = WScript.CreateObject("WScript.Shell")
  43. >>"%TEMP%\RecoverDate.vbs" ECHO WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "%RegDateOld%", "REG_SZ"
  44. cscript /nologo "%temp%\RecoverDate.vbs"
  45. REM 清除脚本运行时产生的临时文件
  46. DEL "%TEMP%\UnifyDate.vbs"
  47. DEL "%TEMP%\RecoverDate.vbs"
  48. DEL "%TEMP%\DstDate.vbs"
  49. DEL "%TEMP%\BackupDate.vbs"
  50. ECHO 指定文件已全部删除,请前往目标路径检查执行结果。
  51. ECHO 按任意键退出
  52. :: Pause>nul
复制代码

TOP

找到答案了

Forfiles /S /P c:\tmpfiles\ /D -1 /M *.* /C "cmd /c del /S /Q @file"

TOP

回复 4# liuwl03
我也有这样的问题..请问 你是怎么写的 批处理..我想借鉴下..我是要删除30天的文件夹...文件夹里面有些是有文件.有些没有的..

达到的效果是:
通过运行批处理 删除指定时间的前30天的文件夹(我的文件夹是 2012-1-1 2012-4-15 这样来命名的)

TOP

返回列表