|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『楼 主』:
奥运倒计时,请大家帮助完善!!!
在此声明我不是在刻意标榜,而是以一个自豪的中国人身份写下了这段代码:
-----------------------------------
在此严重感谢zh159兄多次测试并指出bug。
-----------------------------------
于2008年4月18日再次更新,加入毫秒倒计时。
@echo off&color ac&mode con cols=50 lines=10
title 奥运倒计时--made by zw19750516(cn-dos)
echo.&echo.&echo.
echo 我们每一个中国人都在期盼这一自豪时刻的到来!
echo.
for /l %%i in (1,1,100) do call,set cls=%%cls%%
goto one
:two
set n=2&set var=08-07&goto begin
:one
set n=1&set var=%date:~5,-4%
:begin
set month=%var:~1,1%&set number=29
set /a month-=1
for /l %%i in (1,1,%month%) do call :lp %%i
set /a number+=100%var:~3,2%%%100
set str=%str% %number%
if not %n% equ 2 goto two
for /f "tokens=1,2" %%i in ("%str%") do set /a day=%%j-%%i
set /a hm=100-1000%time:~9,2%%%1000,m=60-100%time:~6,2%%%100,f=60-100%time:~3,2%%%100,s=43-%time:~,2%
if %hm% equ 100 set /a hm-=100,m+=1
if %m% equ 60 set /a m-=60,f+=1
if %f% equ 60 set /a f-=60,h+=1
if %s% geq 24 set /a s-=24,day+=1
set /p= 离北京奥运开幕还有%day%天%s%小时%f%分%m%秒%hm%毫秒<nul
set /p=%cls%<nul
set n=0&set number=0
goto begin
:lp
for %%i in (1,3,5,7,8,10) do if %%i equ %1 set /a number+=31
for %%i in (4,6,9,11) do if %%i equ %1 set /a number+=30 [ Last edited by zw19750516 on 2008-4-19 at 09:13 PM ]
|
批处理之家新域名:www.bathome.net |
|
2008-4-16 21:14 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
2 楼』:
出现有的bug
1、60秒(现在离北京奥运开幕还有113天23小时43分60秒)
2、无效数字。数字常数只能是十进制(17),十六位进制(0x11)或八进制(021)。(大概是在52、51秒的时候)
颜色改为4c可能好些
[ Last edited by zh159 on 2008-4-16 at 09:26 PM ]
|
|
|
2008-4-16 21:23 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-4-16 21:26 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
4 楼』:
60秒还没解决
新的问题:
不能显示52、51秒,53秒在3秒后直接跳到50秒
PS:还剩129天???
|
|
|
2008-4-16 21:32 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
5 楼』:
Quote: | Originally posted by zh159 at 2008-4-16 21:32:
60秒还没解决
新的问题:
不能显示52、51秒,53秒在3秒后直接跳到50秒
PS:还剩129天??? |
|
谢谢楼上60秒60分是我大意了,己解决,但53、52、51的问题不知从何入手!!!
[ Last edited by zw19750516 on 2008-4-16 at 09:49 PM ]
|
批处理之家新域名:www.bathome.net |
|
2008-4-16 21:37 |
|
|
afeichai
初级用户
积分 171
发帖 78
注册 2006-11-22
状态 离线
|
『第
6 楼』:
颜色用0c更换了。那个颜色太刺眼啦
其他的都正常
|
|
2008-4-16 21:52 |
|
|
afeichai
初级用户
积分 171
发帖 78
注册 2006-11-22
状态 离线
|
『第
7 楼』:
晕,还是上面的仔细,果真有53、52、51的问题
|
|
2008-4-16 21:54 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
8 楼』:
53、52、51的问题是你不能直接拿08,09进行计算,set/a会认为是8进制而计算错误(会提示“无效数字。数字常数只能是十进制(17),十六位进制(0x11)或八进制(021)。”,只是闪的太快,不容易发现),所以01-09最好先去掉前面的0
|
|
|
2008-4-16 22:05 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
9 楼』:
再次感谢:
再次感谢兄弟,其实我也往这方面想了,因其它的个位数都没问题,就没细想了,现在问题解决了,但代码长了好多。
|
批处理之家新域名:www.bathome.net |
|
2008-4-16 22:17 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
10 楼』:
当小时为 0 点时,代码无法正确运行,
另:使用cls 给人一种很不舒服的跳动感,建议用退格键来完成。
|
致精致简! |
|
2008-4-17 00:15 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
11 楼』:
粗略作了一个,不知道计算方面有没有错误。
:
@echo off&color ac&mode con cols=50 lines=10
for /l %%a in (1 1 100) do call set "t=%%t%%"
for /f "tokens=1-3 delims=./- " %%a in ("%date%") do (
set /a sy=%%a,sm=100%%b%%100,sd=100%%c%%100
)
for /l %%i in (%sm% 1 8) do call :loop %%i
set /a mt-=sd
for /f "tokens=1-3 delims=.: " %%a in ("%time%") do (
set /a ss=20-100%%a%%100-1,ff=60-100%%b%%100,mm=60-100%%c%%100
)
echo.&echo.
echo 我们每个中国人都在期盼这一自豪时刻的到来!
echo.&echo.
set var=%time:~7,1%
:lis
if %mm% equ 0 set /a ff-=1,mm=59
if %ff% equ 0 set /a ss-=1,ff=59
if %ss% lss 0 set /a ss=%ss:~-1%,mt-=1
if %ss% equ 0 set /a ss=23,mt-=1
set /p= 现在离北京奥运开幕还有%mt%天%ss%小时%ff%分%mm:~-2%秒%time:~9%毫秒<nul
set /p=%t%<nul
set num=%time:~7,1%
if %var% neq %num% (set/a mm-=1&set var=%time:~7,1%)
goto lis
:loop
for /f "tokens=%~1" %%a in ("31 29 31 30 31 30 31 8") do set /a mt+=%%a
goto :eof
|
致精致简! |
|
2008-4-17 02:05 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-4-17 09:31 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
13 楼』:
排版还有点问题:
稍做修改:
@echo off&color ac&mode con cols=50 lines=10
title 奥运倒计时
for /l %%a in (1 1 100) do call set "t=%%t%%"
for /f "tokens=1-3 delims=./- " %%a in ("%date%") do (
set /a sy=%%a,sm=100%%b%%100,sd=100%%c%%100
)
for /l %%i in (%sm% 1 8) do call :loop %%i
set /a mt-=sd
for /f "tokens=1-3 delims=.: " %%a in ("%time%") do (
set /a ss=20-100%%a%%100-1,ff=60-100%%b%%100,mm=60-100%%c%%100
)
echo.&echo.
echo 我们每个中国人都在期盼着这一自豪时刻的到来!
echo.&echo.&echo.
set var=%time:~7,1%
:lis
if %mm% equ 0 set /a ff-=1,mm=59
if %ff% equ 0 set /a ss-=1,ff=59
if %ss% lss 0 set /a ss=%ss:~-1%,mt-=1
if %ss% equ 0 set /a ss=23,mt-=1
set /p= 离北京奥运开幕还有%mt%天%ss%小时%ff%分%mm:~-2%秒%time:~9%毫秒<nul
set /p=%t%<nul
set num=%time:~7,1%
if %var% neq %num% (set/a mm-=1&set var=%time:~7,1%)
goto lis
:loop
for /f "tokens=%~1" %%a in ("31 29 31 30 31 30 31 8") do set /a mt+=%%a
goto :eof
|
批处理之家新域名:www.bathome.net |
|
2008-4-17 09:58 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
14 楼』:
代码有点偷懒
最末尾的100分之一秒是在正计时
而非倒计时
当然
想精确的计算100分之一秒剩余稍微有些困难
因为这段时间内能进行的计算是有限的
如果代码性能太低
等计算出剩余值都指不定过了多少个100分之一秒
另外这也与代码的优化执行策略有关
比如以下这段代码
@echo off
set count=0
set b=0
:loop
set last=%b%
set b=1%time:~9,2%
set /a r=200-b
set /p=%r% <nul
set /a count+=1
if %count% lss 1000 goto loop
pause
|
|
2008-4-18 09:30 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
15 楼』:
有道理,好像这样可以显示毫秒的倒计时,不过也看不出来。呵呵。。
:
@echo off
set n=101
for /l %%a in (1 1 100) do (
set /a n-=1
call set _%%a=%%n%%
)
:loop
set b=%time:~9%
call set /p=%%_%b%%%<nul
set /p=<nul
set /a count+=1
if %count% lss 1000 goto loop
pause [ Last edited by 26933062 on 2008-4-18 at 10:25 AM ]
|
致精致简! |
|
2008-4-18 10:22 |
|