Board logo

标题: [日期时间] [已解决]批处理如何计算天数,运行不同的程序 [打印本页]

作者: 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天后不再运行命令,删除计划任务。
  1. @Echo Off
  2. Del LastRun.tim
  3. If Not Exist LastRun.tim (
  4. For /F "Delims=-/ Tokens=1,2,3" %%i In ("%Date: =-%") Do >LastRun.tim Echo;%%i %%j %%k
  5. )
  6. For /F "Delims=-/ Tokens=1,2,3" %%i In ("%Date: =-%") Do Call :DateToDays %%i %%j %%k Now
  7. Set /P LastRun=<LastRun.tim
  8. Call :DateToDays %LastRun% LastRun
  9. Set /A Judge=Now-LastRun
  10. If %Judge% GEQ 120 (
  11. 2>nul Set /A "1/(Judge%30)"&&Goto one||Goto two
  12. ) Else If %Judge% LSS 120 (
  13. Goto one
  14. ) Else If %Judge% EQU 330 At ID /Delete
  15. Pause
  16. :DateToDays
  17. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  18. :DateToDays %yy% %mm% %dd% days
  19. ::
  20. :: 作者:Ritchie Lawrence, 2002-09-26. 版本 1.0
  21. ::
  22. :: 功能:返回从 1970 年 1 月 1 日到给定的日期之间所经过的天数。
  23. ::       适用于 NT4/2000/XP/2003.
  24. ::
  25. :: 参数:%1 待转换的年,两位或者四位(传值调用)
  26. ::       %2 待转换的月,可以以零开头(传值调用)
  27. ::       %3 待转换的日,可以以零开头(传值调用)
  28. ::       %4 该变量用于接收所经过的天数(引用调用)
  29. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  30. setlocal ENABLEEXTENSIONS
  31. set yy=%1&set mm=%2&set dd=%3
  32. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  33. set /a dd=100%dd%%%100,mm=100%mm%%%100
  34. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  35. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  36. endlocal&set %4=%j%&goto :EOF
  37. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
复制代码
符合要求否?
作者: freesoft00    时间: 2015-3-21 22:43

  1. 比如批处理是这样的
  2. @echo off
  3. 判断时间的部分
  4. :one
  5. 第一个命令
  6. exit
  7. :two
  8. 第二个命令
  9. 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
  1. @echo off
  2. if exist "C:\Windows\getdate.txt" goto main
  3. for /l %%a in (30 30 330) do (
  4. (echo LastDate=date(^)+%%a
  5. echo FmtDate=right(year(LastDate^),4^) ^& right("0" ^& month(LastDate^),2^) ^& right("0" ^& day(LastDate^),2^)
  6. echo wscript.echo FmtDate)>getdate.vbs
  7. for /f %%b in ('cscript /nologo getdate.vbs') do >>"C:\Windows\getdate.txt" echo,%%b
  8. )
  9. del getdate.vbs
  10. :main
  11. set tdate=%date:~0,4%%date:~5,2%%date:~8,2%
  12. set n=1
  13. setlocal enabledelayedexpansion
  14. for /f "delims=" %%e in ('type "C:\Windows\getdate.txt"') do (
  15. if !n! == 4 set aa=%%e
  16. set /a n+=1
  17. set bb=%%e
  18. )
  19. if !tdate! gtr !bb! (
  20. del "C:\Windows\getdate.txt"
  21. echo 删除任务计划
  22. del %0 & exit
  23. )
  24. for /f "delims=" %%i in ('type "C:\Windows\getdate.txt"') do (
  25. if !tdate! equ %%i if !tdate! lss !aa! (echo 命令1)
  26. if !tdate! equ %%i if !tdate! geq !aa! (echo 命令2)
  27. )
  28. endlocal
复制代码

作者: freesoft00    时间: 2015-3-22 00:13

thank 有 了各位!谢谢!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2