Board logo

标题: [游戏娱乐] 批处理版2012奥运倒计时 [打印本页]

作者: batman    时间: 2009-8-21 18:39     标题: 批处理版2012奥运倒计时

&&2008北京奥运的成功举办在全世界引起了巨大的震撼,而这对于我们华夏儿女来说,更
是一份值得恒久珍存的自信和豪迈。2008年8月8日那辉煌的一刻将永远载入史册并铭刻在
每一个中国人的心中。。。
  2008北京奥运是第二十九届奥运盛会,下一届也就是第三十届奥运会将在英国伦敦举
行。那么我想问大家,你们是否知道伦敦奥运会具体的开幕时间呢?告诉大家吧,伦敦奥
运会将于2012年7月27日伦敦时间20点12分整正式开幕,换算成北京时间即为2012年7月
27日12点12分。那么大家又知道,当前时间离2012奥运开幕还有多久吗?请看下面的批
处理代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. title 2012奥运倒计时 made by batman
  3. mode con cols=60 lines=10&color 1c
  4. if defined ok goto end
  5. set "ok=a"&start /b %~nx0
  6. if "%date:~,4%%date:~5,2%%date:~8,2%%time:~,2%%time:~3,2%%time:~6,2%" gtr "20120727121200" (
  7.    echo 倒计时时间已过。。。&ping /n 3 127.1>nul&goto :eof
  8. )
  9. for /l %%a in (1,1,60) do set "k=!k! "
  10. set /a num=31,_2012=7
  11. for %%a in (1 3 5 7 8 10 12 4 6 9 11) do (
  12.      if %%a equ 4 set /a num-=1
  13.      set /a _%%a=num
  14. )
  15. :again
  16. set /a y=%date:~,4%,mo=1%date:~5,2%%%100,d=1%date:~8,2%%%100,h=%time:~,2%,m=1%time:~3,2%%%100,s=1%time:~6,2%%%100,ms=1%time:~9,2%%%100,_%y%=mo,num_d=-5
  17. for /l %%a in (%y% 1 2012) do (
  18.      if %%a equ 2012 (set /a _2=29) else set /a _2=28
  19.      if %y% equ 2012 (
  20.          if %mo% equ 7 (
  21.             set /a num_d+=31-d
  22.             ) else (
  23.             for /l %%b in (%mo% 1 7) do set /a num_d+=_%mo%
  24.             set /a num_d-=d
  25.          )
  26.         ) else (
  27.          if %%a neq 2012 set /a num_d+=365
  28.          for %%b in (%y% 2012) do (
  29.              if %%b equ %%a (
  30.                 if %%b equ %y% (set "+=-"&set /a num_d+=_%mo%-d) else set "+=+"
  31.                 for /l %%c in (1,1,!_%%b!) do set /a num_d!+!=_%%c
  32.              )
  33.          )
  34.      )
  35. )
  36. set /a num_h=35-h,num_m=71-m,num_s=59-s,num_ms=100-ms
  37. for %%a in (ms-100-s s-60-m m-60-h h-24-d) do (
  38.     for /f "tokens=1-3 delims=-" %%a in ("%%a") do if !num_%%a! geq %%b set /a num_%%a-=%%b,num_%%c+=1
  39. )
  40. if %num_ms% lss 10 set "num_ms=0%num_ms%"
  41. set /p=%k%   离第三十届伦敦奥运会开幕还有%num_d%天%num_h%小时%num_m%分%num_s%秒%num_ms%毫秒<NUL
  42. for /l %%a in (1,1,600) do echo>nul
  43. goto again
  44. :end
  45. echo.&echo.&echo                 同一个世界   同一种期盼&echo.&echo.
  46. pause>nul
  47. taskkill /fi "windowtitle eq 2012奥运倒计时 made by batman">nul
复制代码
----------------------------------------------------------------------------------------------------
研究net的数码雨后加入了任意键退出功能----------2009年8月22日 14:42分更新
作者: 基拉freedom    时间: 2009-8-21 22:09

支持下
让我慢慢看看代码
作者: 基拉freedom    时间: 2009-8-21 22:12

恩 建议把字体颜色换一下 红色闪得很不舒服
作者: netbenton    时间: 2009-8-21 23:21

把退格符串放到变量,这样就不会闪了:

set /p=!tg!   离第三十届伦敦奥运会开幕还有%num_d%天%num_h%小时%num_m% 分%num_s%秒%num_ms%毫秒<NUL
作者: batman    时间: 2009-8-21 23:49     标题: 回复 4楼 的帖子

多谢net的提醒,一时竟忘记这样处理了,呵呵。。。
顶楼已更新并修正了当年份为2012年的两处bug。
作者: defanive    时间: 2009-8-22 00:50

那个RL的函数库不是已经有个计算的函数么,用起来多方便,效率也高。。。
2012,好遥远啊。。。
作者: yslyxqysl    时间: 2009-8-22 09:04

似乎少了一天...
同一个世界   同一种期盼


2012-07-26 星期四, 9:04:40.46,还有0天3小时7分19秒54毫秒

作者: chy1979126    时间: 2009-8-22 09:06     标题: 如果 觉得颜色不好 可以考虑0a

mode con cols=60 lines=10&color 0a
作者: batman    时间: 2009-8-22 09:40     标题: 回复 7楼 的帖子

确实是少了一天,原因当小时值高于24时天数没有加1,已修正,多谢。

[ 本帖最后由 batman 于 2009-8-22 13:15 编辑 ]
作者: 523066680    时间: 2009-8-22 21:23

当是小插曲吧。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. mode con cols=25 lines=5
  4. title %date%
  5. set "cut="
  6. set "str=xxxxxxxx"
  7. :a
  8. set t=%time:~0,8%
  9. call :next
  10. ping -n 3 127.1>nul
  11. set "t=        "
  12. call :next
  13. goto :a
  14.    :next
  15.     for /l %%a in (0,1,7) do (set num%%a=%%a)
  16.     set /a aa=8
  17.     :aa
  18.      set /a rand=%random%%%aa,aa-=1
  19.      set /a x=num%rand%,xb=x+1
  20.      set str=!str:~0,%x%!!t:~%x%,1!!str:~%xb%!
  21.      set num%rand%=!num%aa%!
  22.      ping -n 1 127.1>nul
  23.      cls
  24.      echo,   %str%
  25.     if %aa% gtr 0 (goto :aa)
  26.    goto :eof
复制代码

作者: neorobin    时间: 2009-12-8 23:40     标题: 小讨论

  1. if "%date:~,4%%date:~5,2%%date:~8,2%%time:~,2%%time:~3,2%%time:~6,2%" gtr "20120727121200"
复制代码
可以简作
  1. if "%date:~,10%%time%" geq "2012-07-2712:12:00.00"
复制代码
date 和 time 两个变量的值唯一不规则的就是 时 的数字在小于10时 用了一个空格和一个数字符来表示,
其余, 月, 日, 分, 秒, 百分秒 都是用的两位数字符来表示, 但这个空格并不影响时间的比较
在 ASCII 标准中, 所有的非控制字符(当然包括数字符 1 和 2)的码值都是 大于 空格的码值(0x20)的.

当然有个弊端是 MS 把 年月日的分隔符短横线(-)和时分秒百分秒的分隔符冒号和点号(:.)给换了

[ 本帖最后由 neorobin 于 2009-12-8 23:42 编辑 ]
作者: batman    时间: 2009-12-9 08:37     标题: 回复 11楼 的帖子

之所以写成这样也是为了防止各人机器上的时间格式不一样,

如有的是2009-12-09,而有的可能是2009/12/09。
作者: neorobin    时间: 2009-12-9 11:40     标题: 回复 12楼 的帖子

同意, 试改了一下, 区域和语言设置确实也影响到了命令行的时间格式
作者: broly    时间: 2010-11-25 23:29

我提个建议。这句
  1. set "ok=a"&start /b %~nx0
复制代码
最好改为
  1. set "ok=a"&start /b "%~nx0"
复制代码
我刚才运行的时候,名字有空格,报错了。
瑕不掩瑜,瑕不掩瑜~
作者: qq415650    时间: 2010-12-13 11:25

太帅了   佩服 我就佩服技术能人
作者: zsl200911    时间: 2013-2-21 14:02

学习一下,谢谢




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