中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-25 04:43
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创][分享]不论节假日多长,保留指定天数的数据 查看 705 回复 1
楼 主 [原创][分享]不论节假日多长,保留指定天数的数据 发表于 2008-09-20 03:51 ·  中国 浙江 宁波 电信
初级用户
积分 110
发帖 41
注册 2007-03-31 17:20
19年会员
UID 83521
性别 男
状态 离线
前提:
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 rd /s/q %usbdisk%\Net-%tmpday%
ver


那个保留日期可能看上去有点多余,不过在我的批处理里,它远不止这点应用,懒得删了,直接贴上来。
2 发表于 2008-09-20 10:37 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
三个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
)
论坛跳转: