楼 主
请问大家如何用批处理何做一个倒计时
发表于 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 ]
第 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 性别 男
状态 离线
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正