标题: [日期时间] [已解决]批处理如何计算天数,运行不同的程序 [打印本页]
作者: freesoft00 时间: 2015-3-21 22:22 标题: [已解决]批处理如何计算天数,运行不同的程序
这个是一个系统开机计划任务。开机会运行的。
第一次创建一个文本作为时间标记,可以计算这个文本的创建时间(不知道这个保险不保险),业可以直接把当前的时间写入到这个标记文件中。
每次启动的时候运行一次批处理,拿当前的时间和这个标记文件的时间做比较,如果是30天以后就运行one后面的命令,60天也运行noe后面的命令,90天也运行one后面的命令,120天就运行two第二个命令了,后面还是每隔30天运行一次第二个命令,直到第330天后不再运行命令,删除计划任务。
作者: bailong360 时间: 2015-3-21 22:41
本帖最后由 bailong360 于 2015-3-21 23:29 编辑
这个是一个系统开机计划任务。开机会运行的。
第一次创建一个文本作为时间标记,可以计算这个文本的创建时间(不知道这个保险不保险),业可以直接把当前的时间写入到这个标记文件中。
每次启动的时候运行一次批处理,拿当前的时间和这个标记文件的时间做比较,如果是30天以后就运行one后面的命令,60天也运行noe后面的命令,90天也运行one后面的命令,120天就运行two第二个命令了,后面还是每隔30天运行一次第二个命令,直到第330天后不再运行命令,删除计划任务。- @Echo Off
- Del LastRun.tim
- If Not Exist LastRun.tim (
- For /F "Delims=-/ Tokens=1,2,3" %%i In ("%Date: =-%") Do >LastRun.tim Echo;%%i %%j %%k
- )
- For /F "Delims=-/ Tokens=1,2,3" %%i In ("%Date: =-%") Do Call :DateToDays %%i %%j %%k Now
- Set /P LastRun=<LastRun.tim
- Call :DateToDays %LastRun% LastRun
- Set /A Judge=Now-LastRun
- If %Judge% GEQ 120 (
- 2>nul Set /A "1/(Judge%30)"&&Goto one||Goto two
- ) Else If %Judge% LSS 120 (
- Goto one
- ) Else If %Judge% EQU 330 At ID /Delete
- Pause
- :DateToDays
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :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
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
复制代码
符合要求否?
作者: freesoft00 时间: 2015-3-21 22:43
- 比如批处理是这样的
- @echo off
- 判断时间的部分
-
- :one
- 第一个命令
- exit
-
- :two
- 第二个命令
- exit
复制代码
作者: freesoft00 时间: 2015-3-21 22:44
这个就是那个计划任务的批处理,判断时间的部分我不会,根据不同的判断,执行第一个部分命令还是执行two第二部分命令。
作者: bailong360 时间: 2015-3-21 22:49
回复 4# freesoft00
判断时间的部分正好已经写出来了,变量Judge就是第一次运行到这次运行天数
作者: freesoft00 时间: 2015-3-21 22:56
回复 5# bailong360
如果方便请兄弟写一个完整的,我不是太会呀。
作者: pcl_test 时间: 2015-3-21 23:32
本帖最后由 pcl_test 于 2015-3-21 23:33 编辑
回复 1# freesoft00 - @echo off
- if exist "C:\Windows\getdate.txt" goto main
- for /l %%a in (30 30 330) do (
- (echo LastDate=date(^)+%%a
- echo FmtDate=right(year(LastDate^),4^) ^& right("0" ^& month(LastDate^),2^) ^& right("0" ^& day(LastDate^),2^)
- echo wscript.echo FmtDate)>getdate.vbs
- for /f %%b in ('cscript /nologo getdate.vbs') do >>"C:\Windows\getdate.txt" echo,%%b
- )
- del getdate.vbs
-
- :main
- set tdate=%date:~0,4%%date:~5,2%%date:~8,2%
- set n=1
- setlocal enabledelayedexpansion
-
- for /f "delims=" %%e in ('type "C:\Windows\getdate.txt"') do (
- if !n! == 4 set aa=%%e
- set /a n+=1
- set bb=%%e
- )
-
- if !tdate! gtr !bb! (
- del "C:\Windows\getdate.txt"
- echo 删除任务计划
- del %0 & exit
- )
-
- for /f "delims=" %%i in ('type "C:\Windows\getdate.txt"') do (
- if !tdate! equ %%i if !tdate! lss !aa! (echo 命令1)
- if !tdate! equ %%i if !tdate! geq !aa! (echo 命令2)
- )
- endlocal
复制代码
作者: freesoft00 时间: 2015-3-22 00:13
thank 有 了各位!谢谢!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |