Board logo

标题: [原创][分享]不论节假日多长,保留指定天数的数据 [打印本页]

作者: AppleWolf     时间: 2008-9-20 03:51    标题: [原创][分享]不论节假日多长,保留指定天数的数据

前提:
1。数据备份来自网络,所以,所有目录名皆为Net-xxxxxxxx,其中xxxxxxxx为日期,如20080917
2. 保留的天数不写在批处理内,而是由外部配置文件来决定,配置文件内书写格式: keepdays=7
3. 之所以写成下面这样,主要是考虑,如果遇双休日怎么解决不上班的问题,当然还包括十一长假,过年等,这种超长假期。
@echo off
setlocal enabledelayedexpansion
del netusbdir.tmp
del usbdir.tmp
set n=
set tmpday=
rem ---------------读取配置文件-------------------
for /f "tokens=*" %%i in (%selfpath%config.ini) do (set %%i)
if "%keepdays%"=="" goto notdefinekeepdays
set /a keepdays=%keepdays%

rem ---------------计算保留天数之前的那个日期-------------------
echo wscript.echo dateadd("d",-%keepdays%,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
if %m% LEQ 9 set m=0%m%
if %d% LEQ 9 set d=0%d%
set /a beforneeddays=%y%%m%%d%

dir Net-20?????? /ad/o-n/b>netusbdir.tmp
echo off
for /f "tokens=2 delims=-" %%i in (netusbdir.tmp) do (>>"usbdir.tmp" echo %%i)
rem ------------------如果日期列表小于保留天数日期则....----------------------
for /f "delims=" %%i in (usbdir.tmp) do (
                        set /a n=n+1&set /a tmpday=%%i&if %%i lss %beforneeddays% (
call :deletenetmorethenkeepdays
)
                                                )
goto over

:deletenetmorethenkeepdays
if %n% GEQ %keepdays% echo [%n%] rd /s/q %usbdisk%\Net-%tmpday%
:over
那个保留日期可能看上去有点多余,不过在我的批处理里,它远不止这点应用,懒得删了,直接贴上来。

作者: HAT     时间: 2008-9-20 10:37
三个for合并成一个行吗?
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do (
  set y=%%i
  set m=%%j
  set d=%%k
)