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

[文件操作] XP下BAT怎样删除文件夹文件,保留最近10天文件?

求助,请大虾帮忙做个批处理,

删除C:\backup,下.bak文件,保留最近10天的备份文件.
注:系统为XP

谢谢!

  1. @echo off & setlocal enabledelayedexpansion
  2. pushd "C:\backup"
  3. call :Date2Day %date:~0,-3% 10 Day
  4. for /r %%i in (*.bak) do (
  5.     for /f "tokens=1 delims= " %%j in ("%%~ti") do set "filedate=%%j" & set "filedate=!filedate:-=/!"
  6.     if !filedate! LEQ %day% (
  7.         set /p=Del-%%i<nul
  8.         del "%%~i">nul 2>nul && echo  ...OK! || echo  ...Fail!
  9.     )
  10. )
  11. pause
  12. exit
  13. :Date2Day //from http://www.cnblogs.com/mac_arthur/archive/2011/12/12/2285013.html
  14. setlocal
  15. for /f "tokens=1-3 delims=/-:\, " %%a in ('echo/%~1') do (
  16. set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%100)
  17. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  18. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  19. set /a i=j-%~2,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  20. 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
  21. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  22. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  23. endlocal&set %~3=%yy%%f%/%mm%%f%/%dd%&goto :EOF
复制代码
在网上百度了下日期计算代码,懒得写了..

TOP

本帖最后由 CrLf 于 2013-8-5 17:12 编辑

可惜 xp 不自带 foriles,不然很容易的:
  1. FORFILES /D -10 /M C:\backup\*.bak /C "del @file"
复制代码
日期计算函数参考这里:http://bbs.bathome.net/viewthread.php?tid=16147
简单搞也可以这样:
  1. @echo off
  2. %1 mshta vbscript:createobject("wscript.shell").run("""%~0"" :"^&now-10)(close)&exit
  3. ::用 mshta 获取十天前的日期
  4. for /f "tokens=1-3 delims=/:" %%a in ("%1") do set /a y=%%a,m=10%%b,d=10%%c
  5. ::解析 vbs 输出的日期格式
  6. for /f "delims=0123456789" %%a in ("%~t0") do set min=%y%%%a%m:~-2%%%a%d:~-2%
  7. ::将取得的日期转为当前系统的日期格式,如果不考虑通用,可把此行改成 set min=%y%-%m:~-2%-%d:~-2%
  8. for %%a in (c:\backup\*) do if %%~ta lss %min% echo    del "%%a"
  9. ::测试无误后把上面这行的 echo 拿掉
  10. pause
复制代码

TOP

返回列表