Board logo

标题: [日期时间] 批处理删除N天前创建或修改的文件 [打印本页]

作者: 随风    时间: 2007-11-14 04:55     标题: 批处理删除N天前创建或修改的文件

::
  1. @echo off&color 1f
  2. :: 删除 N 天前“创建”或“修改”的文件
  3. :: by 小楼一夜听春雨 @bbs.bathome.net 2007-11-13
  4. :: 2009-01-09 日更新 (可处理含特殊符号&!的文件(夹)名)
  5. :: 日期必须是 yyyy-mm-dd 格式
  6. :: 计算日期部分出自 @cn-dos by will sort
  7. set "f=%date:~4,1%"
  8. for %%a in (wjj c m z cw cuowu leixin tian zml yes) do set "%%a="
  9. :start
  10. setlocal
  11. echo\&echo  请输入要处理的文件夹全路径,或拖放文件夹来此窗口。
  12. echo.&set /p wjj=
  13. set "wjj=%wjj:"=%"
  14. if "%wjj:~-1%"=="\" set "wjj=%wjj:~0,-1%"
  15. set "wjj=%wjj%"&cls
  16. if not exist "%wjj%" (
  17.    echo\&echo  没有 "%wjj%" 这个文件夹,请重新输入。
  18.    endlocal&goto start
  19. )
  20. endlocal&set "wjj=%wjj%"&cls
  21. :loop1
  22. setlocal
  23. title "%wjj%"
  24. echo\&echo  请选择要删除的文件类型,c 为创建的文件, w 为修改的文件
  25. echo.&set /p cw= 请选择 [ c , w ] ? &cls
  26. if /i not "%cw%"=="c" if /i not "%cw%"=="w" set cuowu=a
  27. if defined cuowu (
  28.    echo\&echo  输入错误,请重新输入。
  29.    endlocal&goto loop1
  30. )
  31. endlocal&set "leixin=/t%cw%"
  32. if /i "%leixin%"=="/tc" (set c=创建) else set c=修改&cls
  33. :loop2
  34. setlocal
  35. title 删除 "%wjj%" %c% 的文件
  36. echo\&echo  请输入天数,即:需要删除多少天前 “%c%” 的文件。
  37. echo.&set /p tian= 请输入: &cls
  38. echo %tian%|findstr "^[0-9]*$" >nul|| (
  39.   echo\&echo  输入错误,必须是纯数字,请重新输入。
  40.   endlocal&goto loop2
  41. )
  42. endlocal&set "tian=%tian%"&cls
  43. title 删除 "%wjj%" %tian% 前 %c% 的文件
  44. echo\&echo  请选择是否处理子目录, y 是, n 否。
  45. echo\&set /p zml= [ y , n ] ?
  46. if /i "%zml%"=="y" (set zml=/s&set z=(含子目录)
  47.   ) else set "zml="&set z=(不含子目录)
  48. call :Date2Day "%date%" %tian% Day
  49. cls&color fc
  50. echo\&echo  即将删除 "%wjj%" 中%z% %Day% 以前 “%c%” 的文件
  51. echo\&echo  回车继续,其它键退出。
  52. echo\&set /p yes=
  53. if defined yes exit
  54. cls
  55. title 删除 "%wjj%" 中%z% %Day% 以前 “%c%” 的文件
  56. ::::::::::::::::::::     判断并删除文件   ::::::::::::::::::::::::::::::::::
  57. for /f "tokens=*" %%i in (
  58. 'dir /a-d %leixin% %zml% "%wjj%"^|findstr /b "[0-9] ..:"'
  59. ) do (
  60.    for /f "tokens=1* delims=\" %%a in ("%%i") do (
  61.      if not "%%b"=="" (set ml=%%i) else (
  62.        for /f "tokens=1-3* delims= " %%c in ("%%i") do (
  63.          set "str=%%~nxf"
  64.          setlocal enabledelayedexpansion
  65.          if exist "!ml:~0,-4!\!str!" (
  66.            if "%%c" lss "%Day%" (
  67.               ECHO del/q "!ml:~0,-4!\!str!"
  68.               endlocal&set /a m+=1
  69.             )
  70.           ) else endlocal
  71. ))))
  72. color 0a&echo\
  73. if not defined m (echo 文件夹 "%wjj%" 中没有 %Day% 以前 %c% 的文件.
  74. ) else (echo   删除完成。。。&echo\&echo\  共删除 %m% 个文件)
  75. echo\&pause&exit
  76. :::::::::::::::::::::::::::     计算日期   ::::::::::::::::::::::::::::::::::
  77. rem   使用方法:call :Date2Day 2007-11-12 2 Day
  78. rem   变量 Day 就是2007-11-12 减2的结果。
  79. :Date2Day 计算指定天数 前/后 的日期 (封装)
  80. @echo off&setlocal
  81. for /f "tokens=1-3 delims=/-:\, " %%a in ('echo/%~1') do (
  82. set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%100)
  83. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  84. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  85. set /a i=j-%~2,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  86. set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
  87. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  88. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  89. endlocal&set %~3=%yy%%f%%mm%%f%%dd%&goto :EOF
复制代码

作者: novaa    时间: 2007-11-28 22:07     标题: 部分算法不懂

for /f "tokens=1-3 delims=-/. " %%a in ("%date%") do (
set /a xyy=%%a,xmm=100%%b%%100,xdd=100%%c%%100

为什么要用xmm=100%%b%%100啊
直接xmm=%%b不可以?
作者: 随风    时间: 2007-11-29 01:29

这样是把首位的0去掉,否则 遇到0开头的日期或时间,计算的时候会出错。
作者: sihonghong20061    时间: 2008-8-1 15:40     标题: 回复 3楼 的帖子

好像错了   问一下 是不是应该for /f "tokens=1-3 delims=-/. " %%a in ("%date%") do (
set /a xyy=%%a,xmm=100%b%%100,xdd=100%c%%100
  应该只有一个%  问一下 我说的对吗
作者: Batcher    时间: 2008-8-5 23:18     标题: 回复 4楼 的帖子

你是不是把控制变量前面的百分号和取余操作的百分号搞混淆了?呵呵。
作者: gxnews    时间: 2008-10-24 20:45

厉害,真厉害,I 服了 U
作者: 92kp    时间: 2008-10-28 17:47

不知道这个有什么用处。是不是20天内没有使用过的文件都可以安全删除呢?一般情况下是不是这样的呢。
作者: Batcher    时间: 2008-10-28 22:47     标题: 回复 7楼 的帖子

"20天内"?你是得出这个结论的?
作者: xwfswh    时间: 2008-10-29 10:31

新手学习一下
收藏一下,现在暂时还看不太懂~~
作者: wolfly22    时间: 2008-12-21 13:59

强人的强悍都是想象不了……
作者: chao8287    时间: 2009-2-26 13:55

请问楼主如何更改一下来实现删除N天前创建的文件夹?    十分感谢!!!
作者: Batcher    时间: 2009-2-27 22:07     标题: 回复 11楼 的帖子

【方案汇总】批处理删除指定天数日期之前的文件
http://bbs.bathome.net/thread-3334-1-1.html

【方案汇总】批处理删除指定天数日期之前的文件夹
http://bbs.bathome.net/thread-3503-1-1.html
作者: sampeck    时间: 2009-6-26 09:59

凡是删除文件的批处理我都要看懂了才用的.这个暂时收藏了




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2