解惑

解己之惑,解人之惑

使用批处理删除一个月以前的文件

这个其实是上一篇文件备份的延续,既然备份了,备份越来越大当然不行,一般保留一个月的备份就足够了,DOS的功能也基本上能够满足这个要求,不废话,直接给脚本了:

rem Backup
y:
cd y:\01_projects\08_saas\TargetProcessDB
set dirname=%date:~10,4%-%date:~4,2%-%date:~7,2%
mkdir %dirname%
cd %dirname%
copy F:\DailyBackup\*.* .
cd ..

rem Remove backup  of one month ago based on dir name
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set monthprefix=%month:~0,1%
if %month%==01 goto _lastYear
if %monthprefix% EQU 0 goto _onebitmonth
goto _twobitsmonth

:_lastYear
set /a year=%year%-1
set deldate=%year%-12-%day%
goto _execute

:_onebitmonth
set /a oldmonth=%month:~1,1%-1
set deldate=%year%-0%oldmonth%-%day%
goto _execute

:_twobitsmonth
set /a oldmonth=%month%-1
if %oldmonth% EQU 9 (
set deldate=%year%-0%oldmonth%-%day%
)
else (
set deldate=%year%-%oldmonth%-%day%
)
goto _execute

:_execute
for /f %%d in (‘dir /b /d’) do if %%d LSS %deldate% rmdir /s /q %%d

应该看得懂吧。最后一行要留意下,定义变量的时候用了两个%号,这个是必须的。另外就是日期问题,不用关注闰年问题,因为是进行的字符串比较,日期(例如2010-02-29)即使不是合法日期也是没有关系的。另外就是日期的格式,因为是上一篇的延续,所以当然针对的是上一篇的日期格式了。

更新:

又搜索 了下,如果根据目录自己的创建时间来操作,有更简单的方法:

forfiles /p . /m * /d -30 /c “cmd /c rmdir /s /q @path”

如果是遍历所有的子目录删除文件,也很简单:

forfiles /p . /m *.* /d -30 /c “cmd /c del @path”

(Visited 1,643 times, 1 visits today)

3 Comments

  1. :em24: 五一没更新?懒喽。。。

  2. :em24: 这么久都没更新,最近很忙?

  3. 呵呵,回家带孩子了,在公司比较忙

发表评论

邮箱地址不会被公开。 必填项已用*标注

© 2024 解惑

本主题由Anders Noren提供向上 ↑