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

[日期时间] 批处理如何根据日期判断删除日志文件夹,尤其是跨年操作?

本人批处理新人一个,在维护服务器时发现一个问题,如:C:/LOG下有根据日期自动生成的日志文件夹,如C:/LOG/201206,201207,现在想法是做一个批处理加到计划任务里,设置为每个月的1号执行,删除上个月的日志文件夹,如7月1号则执行该批处理删除日志文件夹C:/LOG/201206,最关键的是跨年时,比如说到2013年1月1号时如何判断时间去删除C:/LOG/201212这件文件夹,请高手帮忙看下这段代码该如何写?

本帖最后由 yangfengoo 于 2012-7-7 22:55 编辑
  1. @echo off
  2. set/a riqi=%date:~,4%*100+%date:~5,2%-1,n=riqi%%100
  3. if %n%==0 set/a riqi-=88
  4. rd /s /q "C:/LOG/%riqi%"
复制代码
另一种算法

TOP

  1. @echo off
  2. set/a riqi=%date:~,4%*12+1%date:~5,2%-101,year=riqi/12,month=riqi-year*12+100
  3. if %month%==100 set/a year-=1,month=112
  4. rd /s /q "C:/LOG/%year%%month:~1,2%"
复制代码

TOP

本帖最后由 weichenxiehou 于 2012-7-7 21:56 编辑

回复 1# lsgmj
其实可以换换思路,要删除的文件夹按照时间排序应该是倒数第二个吧?
  1. @echo off&setlocal enabledelayedexpansion
  2. set old=&set new=
  3. for /f "delims=" %%i in ('dir /b /od /ad c:\log|findstr "^[0-9][0-9][0-9][0-9][0-9][0-9]$"') do (
  4.   if defined new set "old=!new!"
  5.   set "new=%%i"
  6. )
  7. rd /s /q c:\log\%old%
复制代码
然后可以添加计划任务,在每个月1号执行这个批处理,可以用windows的添加计划任务的GUI程序,也可以用命令行添加:
  1. schtasks /create /tn rd_per_1st /tr "c:\log\test.bat" /sc monthly /d 1 /f
复制代码
这里假设你将以上批处理保存为c:\log\test.bat
看得多说得多,远比不上写得多。

TOP

返回列表