中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-11 05:31
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问大家如何用批处理何做一个倒计时 查看 1,119 回复 9
楼 主 请问大家如何用批处理何做一个倒计时 发表于 2009-01-08 01:47 ·  中国 广东 深圳 电信
新手上路
积分 11
发帖 7
注册 2008-11-23 13:00
17年会员
UID 131905
性别 男
状态 离线
请问大家如何用批处理何做一个倒计时
要求就像windows启动菜单一样等待用户的选择,如果不作任何选择就按默认操作,而且还有倒计时的时间在跳动。我在网上看到人家用FOR+SET+ECHO做的能显示倒计时,但不能接受用户的输入。用pecmd.exe wait可等待,但不能显示时间,可惜!

[ Last edited by wanxibing on 2009-1-8 at 01:49 ]
2 发表于 2009-01-08 12:17 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
wait没时间等待吗 应该有的
简单!简单!再简单!
3 发表于 2009-01-08 13:28 ·  中国 黑龙江 哈尔滨 电信
新手上路
积分 4
发帖 4
注册 2008-12-26 14:52
17年会员
UID 134978
性别 男
状态 离线
正好今天做了一个,都是参考的这个论坛的资料,谢谢!
关于延时,XP可用ping,这里用的方法PE系统也好使。
另外请教高手,如何在倒计时完成前按任意键退出?

============================================
@echo off
:ExitTimeOut
echo 倒计时显示:&& echo.
if not Exist sleep.exe call :BuildSleep
if "%1"=="" (set WaitSS=20) else (set WaitSS=%1)
set /p WaitA= 还有 %WaitSS% 秒后退出...<nul
:Start
if %WaitSS% GTR 9 (set /p WaitAA= %WaitSS% 秒后退出...<nul) else (set /p WaitAA= %WaitSS% 秒后退出...<nul)
sleep.exe 1000
set /a WaitSS-=1
if %WaitSS%==0 goto EndS
goto Start
)
:EndExitTimeOut
exit

:BuildSleep
rem ASCII汇编代码,延迟精度为0.001秒
echo q | debug>nul
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>sleep.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>sleep.com
echo T}{z~~@GwkBG@OEKcUt`~}@MqqBsy?seHB~_Phxr?@zAB`LrPEyoDt@Cj?>>sleep.com
echo pky_jN@QEKpEt@ij?jySjN@REKpEt@jj?jyGjN@SEKkjtlGuNw?p@pjirz>>sleep.com
echo LFvAURQ?OYLTQ@@?~QCoOL~RDU@?aU?@{QOq?@}IKuNWpe~FpeQFwH?Vkk>>sleep.com
echo _GSqoCvH{OjeOSeIQRmA@KnEFB?p??mcjNne~B?M??QhetLBgBPHexh@e=>>sleep.com
echo EsOgwTLbLK?sFU`?LDOD@@K@xO?SUudA?_FKJ@N?KD@?UA??O}HCQOQ??R>>sleep.com
echo _OQOL?CLA?CEU?_FU?UAQ?UBD?LOC?ORO?UOL?UOD?OOI?UgL?LOR@YUO?>>sleep.com
echo dsmSQswDOR









Last edited by zdq98 on 2009-1-8 at 13:54 ]
4 发表于 2009-01-08 14:43 ·  中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
这样?
@echo off
if not "%1"=="" goto %1
del "%temp%\#" 2>nul
start /b %~fs0 :aa
echo.&set/p= 按任意键打开c盘,不按键将自动打开d盘...<nul&pause>nul
>"%temp%\#" type nul
start c:\&exit
:aa
for /l %%a in (10 -1 1) do (
title 倒计时 %%a 秒...
if exist "%temp%\#" (
del "%temp%\#"
exit
)
ping -n 2 127.1>nul
)
start d:\&title 打开d盘...
for /f "tokens=2" %%a in ('tasklist /fi "windowtitle eq 打开d盘..." /nh') do (
taskkill /f /pid %%a
)
exit
5 发表于 2009-01-08 18:02 ·  中国 黑龙江 哈尔滨 电信
新手上路
积分 4
发帖 4
注册 2008-12-26 14:52
17年会员
UID 134978
性别 男
状态 离线
谢谢 moniuming ,
倒计时想在屏幕里面显示,我不懂您的代码,但是我改了一下显示部分,终于可以了
如果有时间的时候请解释一下您的代码?

if not "%1"=="" goto %1 这句是什么意思?
如果这段代码在一个大的批处理里面,有参数,这个 %1 和那个大的批处理的参数会冲突吗?

不好意思,太菜了。。。


@echo off
:ExitTimeOut
set WaitSS=15

if not "%1"=="" goto %1

del "%temp%\#" 2>nul
start /b %~fs0 :StartExitTimeOut
echo.&set/p= 等待 %WaitSS% 秒自动退出...任意键立即退出。 <nul&pause>nul
>"%temp%\#" type nul
exit

:StartExitTimeOut
echo. && echo.
set /p WaitA= 倒计时 %WaitSS% 秒...<nul
for /l %%a in (%WaitSS% -1 1) do (

if %%a GTR 9 (set /p WaitAA= %%a 秒...<nul) else (set /p WaitAA= %%a 秒...<nul)

if exist "%temp%\#" (
del "%temp%\#"
exit
)
sleep.exe 1000
)
title 倒计时结束,程序退出...
for /f "tokens=2" %%a in ('tasklist /fi "windowtitle eq 倒计时结束,程序退出..." /nh') do (
taskkill /f /pid %%a
)
exit


[ Last edited by zdq98 on 2009-1-8 at 18:38 ]
6 发表于 2009-01-08 19:09 ·  中国 广西 百色 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
如果这段代码在一个大的批处理里面,有参数,这个 %1 和那个大的批处理的参数会冲突吗?

可以自己定义啊,比如:
if "%1"==":startexittimeout" goto :startexittimeout
7 发表于 2009-01-08 19:17 ·  中国 广东 江门 电信
中级用户
★★
积分 338
发帖 175
注册 2007-10-21 15:30
18年会员
UID 100351
性别 男
状态 离线
要不我们搞个函数版吧!
8 发表于 2009-01-08 21:09 ·  中国 广东 广州 番禺区 电信
初级用户
★★
l i u s s
积分 73
发帖 101
注册 2008-09-17 00:21
17年会员
UID 125825
性别 男
来自 GZ
状态 离线
其实在Win2003中有一个timeout.exe的延时程序,可以实现倒计时并显示秒数,使用方法是: timeout /t 10 即可进行10秒倒计时,把此程序放置到System32目录下,日后在批处理中就可调用。了解其参数,可在CMD窗口下输入 timeout /?

[ Last edited by newxso on 2009-1-25 at 16:34 ]
附件
timeout.rar (13.68 KiB, 下载次数: 22)
9 纯批处理也可以精度延时(0.01)秒, wait函数代替sleep.exe 发表于 2009-01-08 23:02 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
@echo off
:ExitTimeOut
set WaitSS=15

if "%1"==":StartExitTimeOut" goto %1

del "%temp%\#" 2>nul
start /b %~fs0 :StartExitTimeOut
echo.&set/p= 等待 %WaitSS% 秒自动退出...任意键立即退出。 <nul&pause>nul
>"%temp%\#" type nul
exit

:StartExitTimeOut
echo. && echo.
set /p WaitA= 倒计时 %WaitSS% 秒...<nul
for /l %%a in (%WaitSS% -1 1) do (

if %%a GTR 9 (set /p WaitAA= %%a 秒...<nul) else (set /p WaitAA= %%a 秒...<nul)

if exist "%temp%\#" (
del "%temp%\#"
exit
)
call :wait 100
)
title 倒计时结束,程序退出...
for /f "tokens=2" %%a in ('tasklist /fi "windowtitle eq 倒计时结束,程序退出..." /nh') do (
taskkill /f /pid %%a
)
exit

:wait 延时 %1 毫秒
@echo off&setlocal enabledelayedexpansion
call :subtime
set /a bb=aa+%1

:cmptime
call :subtime
if %aa% lss %bb% goto :cmptime
endlocal
goto :eof

:subtime
set tf=%time%
set "aa=(100%tf:~0,2%%%100)*360000+(100%tf:~3,2%%%100)*6000+(100%tf:~6,2%%%100)*100+(100%tf:~9,2%%%100)"
set /a aa=%aa%
goto :eof
精简
=> 个人网志
10 发表于 2009-01-09 12:25 ·  中国 黑龙江 哈尔滨 电信
新手上路
积分 4
发帖 4
注册 2008-12-26 14:52
17年会员
UID 134978
性别 男
状态 离线
大家回复的真快呀,不止一种方法完美解决,谢谢!
论坛跳转: