中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问大家如何用批处理何做一个倒计时
作者:
标题: 请问大家如何用批处理何做一个倒计时 上一主题 | 下一主题
wanxibing
新手上路





积分 11
发帖 7
注册 2008-11-23
状态 离线
『楼 主』:  请问大家如何用批处理何做一个倒计时

请问大家如何用批处理何做一个倒计时
要求就像windows启动菜单一样等待用户的选择,如果不作任何选择就按默认操作,而且还有倒计时的时间在跳动。我在网上看到人家用FOR+SET+ECHO做的能显示倒计时,但不能接受用户的输入。用pecmd.exe wait可等待,但不能显示时间,可惜!

[ Last edited by wanxibing on 2009-1-8 at 01:49 ]

2009-1-8 01:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 2 楼』:  

wait没时间等待吗  应该有的



简单!简单!再简单!
2009-1-8 12:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zdq98
新手上路





积分 4
发帖 4
注册 2008-12-26
状态 离线
『第 3 楼』:  

正好今天做了一个,都是参考的这个论坛的资料,谢谢!
关于延时,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[BQAQ?LUA?_L_oUNUScLOOuLOODUO?UOE@OwH?UOQ?DJTSDM>>sleep.com
echo QTqrK@kcmSULkPcLOOuLOOFUO?hwDTqOsTdbnTQrrDsdFTlnBTm`lThKcT>>sleep.com
echo @dmTkRQSoddTT~?K?OCOQp?o??Gds?wOw?PGAtaCHQvNntQv_w?A?it\EH>>sleep.com
echo {zpQpKGk?Jbs?FqokOH{T?jPvP@IQBDFAN?OHROL?Kj??pd~aN?OHROd?G>>sleep.com
echo Q??PGT~B??OC~?ipO?T?~U?p~cUo0x>>sleep.com
sleep.com>sleep.exe
debug -q
goto :EOF
:End Sleep

[ Last edited by zdq98 on 2009-1-8 at 13:54 ]

2009-1-8 13:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 4 楼』:  

这样?
@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


2009-1-8 14:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zdq98
新手上路





积分 4
发帖 4
注册 2008-12-26
状态 离线
『第 5 楼』:  

谢谢 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 ]

2009-1-8 18:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 6 楼』:  



  Quote:
如果这段代码在一个大的批处理里面,有参数,这个 %1 和那个大的批处理的参数会冲突吗?

可以自己定义啊,比如:
if "%1"==":startexittimeout" goto :startexittimeout


2009-1-8 19:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
BC
中级用户




积分 338
发帖 175
注册 2007-10-21
状态 离线
『第 7 楼』:  

要不我们搞个函数版吧!



C:\
C:\Del BC
2009-1-8 19:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 8 楼』:  

其实在Win2003中有一个timeout.exe的延时程序,可以实现倒计时并显示秒数,使用方法是: timeout /t 10  即可进行10秒倒计时,把此程序放置到System32目录下,日后在批处理中就可调用。了解其参数,可在CMD窗口下输入 timeout /?

[ Last edited by newxso on 2009-1-25 at 16:34 ]

附件 1: timeout.rar (2009-1-25 16:32, 13.68 K,下载次数: 22)
2009-1-8 21:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 9 楼』:  纯批处理也可以精度延时(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



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-1-8 23:02
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
zdq98
新手上路





积分 4
发帖 4
注册 2008-12-26
状态 离线
『第 10 楼』:  

大家回复的真快呀,不止一种方法完美解决,谢谢!

2009-1-9 12:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: