中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-11 04:30
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » 请问大家如何用批处理何做一个倒计时
可打印版本  1,117 / 9
第1楼 wanxibing 发表于 2009-01-08 01:47
新手上路 发帖 7 积分 11
请问大家如何用批处理何做一个倒计时
请问大家如何用批处理何做一个倒计时
要求就像windows启动菜单一样等待用户的选择,如果不作任何选择就按默认操作,而且还有倒计时的时间在跳动。我在网上看到人家用FOR+SET+ECHO做的能显示倒计时,但不能接受用户的输入。用pecmd.exe wait可等待,但不能显示时间,可惜!

[ Last edited by wanxibing on 2009-1-8 at 01:49 ]
第2楼 terse 发表于 2009-01-08 12:17
银牌会员 发帖 946 积分 2,404
wait没时间等待吗 应该有的
第3楼 zdq98 发表于 2009-01-08 13:28
新手上路 发帖 4 积分 4
正好今天做了一个,都是参考的这个论坛的资料,谢谢!
关于延时,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楼 moniuming 发表于 2009-01-08 14:43
银牌会员 发帖 574 积分 1,335 来自 广西
这样?
第5楼 zdq98 发表于 2009-01-08 18:02
新手上路 发帖 4 积分 4
谢谢 moniuming ,
倒计时想在屏幕里面显示,我不懂您的代码,但是我改了一下显示部分,终于可以了
如果有时间的时候请解释一下您的代码?

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

不好意思,太菜了。。。



[ Last edited by zdq98 on 2009-1-8 at 18:38 ]
第6楼 moniuming 发表于 2009-01-08 19:09
银牌会员 发帖 574 积分 1,335 来自 广西
如果这段代码在一个大的批处理里面,有参数,这个 %1 和那个大的批处理的参数会冲突吗?

可以自己定义啊,比如:
第7楼 BC 发表于 2009-01-08 19:17
中级用户 发帖 175 积分 338
要不我们搞个函数版吧!
第8楼 newxso 发表于 2009-01-08 21:09
初级用户 发帖 101 积分 73 来自 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)
第9楼 netbenton 发表于 2009-01-08 23:02
银牌会员 发帖 752 积分 1,916 来自 广西
纯批处理也可以精度延时(0.01)秒, wait函数代替sleep.exe
@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楼 zdq98 发表于 2009-01-09 12:25
新手上路 发帖 4 积分 4
大家回复的真快呀,不止一种方法完美解决,谢谢!
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023