这个其实是上一篇文件备份的延续,既然备份了,备份越来越大当然不行,一般保留一个月的备份就足够了,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”