中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创][分享]不论节假日多长,保留指定天数的数据
作者:
标题: [原创][分享]不论节假日多长,保留指定天数的数据 上一主题 | 下一主题
AppleWolf
初级用户





积分 110
发帖 41
注册 2007-3-31
状态 离线
『楼 主』:  [原创][分享]不论节假日多长,保留指定天数的数据

前提:
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
那个保留日期可能看上去有点多余,不过在我的批处理里,它远不止这点应用,懒得删了,直接贴上来。


2008-9-20 03:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

三个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
)




2008-9-20 10:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: