Board logo

标题: [文件操作] 这个批处理删除老文件的 为啥我的删不掉啊!但提示成功了文件还在! [打印本页]

作者: haichuan5121    时间: 2014-12-14 14:51     标题: 这个批处理删除老文件的 为啥我的删不掉啊!但提示成功了文件还在!

  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
复制代码

作者: haichuan5121    时间: 2014-12-14 16:27

哦 知道了  最后删除那 多了一个echo
  求大神修改下 改成不需要手动输入 类型的 zhi

满足:只需输入路径跟天数 或者直接设定为7天 就可以删除七天前的文件,带完成提示的那种;
作者: DAIC    时间: 2014-12-14 19:41

把第58行里面的 %leixin% 删掉
把第24行到31行删掉




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