|
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
状态 离线
|
|
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 |
|
|
zdq98
新手上路
积分 4
发帖 4
注册 2008-12-26
状态 离线
|
『第
10 楼』:
大家回复的真快呀,不止一种方法完美解决,谢谢!
|
|
2009-1-9 12:25 |
|