dos 删除一星期前的备份文件脚本
ftp数据库每天都备份,备份文件名格式固定包含日期,请问怎样用dos命令删除一星期前的备份呢? 用的是windows任务执行计划自动执行bat文件 set cicdate=%date:~0,4%-%date:~5,2%-%date:~8,2% set /a deldata=cicdate 这儿日期怎么得到7天前的呢 ( echo open 127.0.0.1 echo hanrj echo 123 echo prompt echo get %cicdate%*.zip echo mdelete *%deldata%*.bak )> test1.txt ftp -s:E:\b\test1.txt PAUSE
bat命令最好到windows版去问,bat计算上很麻烦,建议用wscript可以写js或vbs脚本,功能更强大。
不熟悉,wsf脚本用的多一些,windows自带,不需要安装额外的软件
批处理获取指定天数之前的日期 @echo off
::需要调用VBS
rem 指定天数
set DaysAgo=1
>"%temp%\MyDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
set DstDate=%%a
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
echo %DaysAgo%天之前的日期是:%DstDate%
pause 复制代码@echo off
::本例需要reg.exe的支持(XP系统自带)
::此类方法的关键在于如何获取标准化的当前系统日期
::请参考http://bbs.bathome.net/thread-3328-1-1.html
::然后调用 Ritchie Lawrence 的日期函数,便可扩展出很多种方法,此处不再赘述。
::日期转换的核心算法请参考http://bbs.bathome.net/thread-3056-1-1.html
rem 指定天数
set DaysAgo=1
for /f "skip=4 delims= " %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do (
set RegDateOld=%%a
)
set RegDateOld=%RegDateOld:~-8%
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
set /a PassDays-=%DaysAgo%
call :DaysToDate %PassDays% DstYear DstMonth DstDay
set DstDate=%DstYear%-%DstMonth%-%DstDay%
echo %DaysAgo%天之前的日期是:%DstDate%
pause
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToDays %yy% %mm% %dd% days
::
:: 作者:Ritchie Lawrence, 2002-09-26. 版本 1.0
::
:: 功能:返回从 1970 年 1 月 1 日到给定的日期之间所经过的天数。
:: 适用于 NT4/2000/XP/2003.
::
:: 参数:%1 待转换的年,两位或者四位(传值调用)
:: %2 待转换的月,可以以零开头(传值调用)
:: %3 待转换的日,可以以零开头(传值调用)
:: %4 该变量用于接收所经过的天数(引用调用)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %4=%j%&goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DaysToDate %days% yy mm dd
::
:: 作者:Ritchie Lawrence, 2002-06-15. 版本 1.1
::
:: 功能:从 1970-01-01 到指定日期之间所经过的天数对应的日历日期。
:: 适用于 NT4/2000/XP/2003.
::
:: 参数:%1 从 1970-01-01 到指定日期之间所经过的天数(传值调用)
:: %2 该变量用于接收年,四位(引用调用)
:: %3 该变量用于接收月,两位,01-12(引用调用)
:: %4 该变量用于接收日,两位,01-31(引用调用)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF
|