
标题: [日期时间] 批处理怎样实现在指定时间内显示选择操作项,超过时间则自动选择一项 [打印本页]
作者: jl001002 时间: 2014-9-15 20:10 标题: 批处理怎样实现在指定时间内显示选择操作项,超过时间则自动选择一项
本帖最后由 pcl_test 于 2016-7-17 18:48 编辑
要求:1.在5秒内选择1~6的选项,如果不选择,则自动选择1选项
2.有倒计时提示
我写了一段,可是不行,我是新手,才接触2天,请高手们指导,谢谢~~!- mode con cols=50 lines=15
- title=启动
- color 2f
- @ECHO OFF
- :00000
- CLS
-
- set TT=5
- for /l %%a in (%TT%,-1,1)do (
- cls
- ECHO.
- ECHO 请选择!!!!!
- ECHO.
- ECHO 1.
- ECHO 2. 3.
- ECHO 4. 5.
- ECHO 6.退出该软件
-
- choice/c 123456 /t 4 /d 1 /m "%%a秒后自动选择1"
- )
- IF %errorlevel%==1 GOTO AAA1
- IF %errorlevel%==2 GOTO AAA2
- IF %errorlevel%==3 GOTO AAA3
- IF %errorlevel%==4 GOTO AAA4
- IF %errorlevel%==5 GOTO AAA5
- IF %errorlevel%==6 GOTO AAA6
复制代码
作者: CrLf 时间: 2014-9-15 22:30
本帖最后由 CrLf 于 2014-9-15 22:34 编辑
举个栗子- @echo off
- %1 goto begin
-
- choice /c 123456 /t 5 /d 1 /n 3>>%0
- echo 您选择的是[%errorlevel%]
-
- IF errorlevel 6 GOTO AAA6
- IF errorlevel 5 GOTO AAA5
- IF errorlevel 4 GOTO AAA4
- IF errorlevel 3 GOTO AAA3
- IF errorlevel 2 GOTO AAA2
- IF errorlevel 1 GOTO AAA1
- pause & exit
-
- :begin
- start /b "" cmd /c "%~0" :
-
- for /l %%a in (5,-1,1) do (
- cls
- echo 还剩 %%a 秒,可选[1,2,3,4,5,6]
- ping /n 2 127.0.0.1 >nul
- exit /b 3>>%0
- ) 2>nul
- exit /b
复制代码
作者: neorobin 时间: 2014-9-15 22:42
回复 1# jl001002
给出两个60秒内计时例
正计时- @echo off
- setlocal enabledelayedexpansion
-
- set "secs=5" & rem 限于<60秒内计时
- set /a "t1=1!time:~-5,2!*100+1!time:~-2!-100, te=secs*100 + 10000"
- :loop
- set /a "t2=(1!time:~-5,2!*100+1!time:~-2! -100 - t1 + 6000) %% 6000+10000"
-
- if !t2! gtr !te! (echo Time is up) & >nul pause
- cls & echo !t2:~-4,-2!:!t2:~-2!
-
- goto :loop
复制代码
倒计时- @echo off
- setlocal enabledelayedexpansion
-
- set "secs=5" & rem 限于<60秒内计时
- set /a "t1=1!time:~-5,2!*100+1!time:~-2!-100"
- :loop
- set /a "t2=secs*100 + 10000 - (1!time:~-5,2!*100+1!time:~-2! -100 - t1 + 6000) %% 6000"
-
- if !t2! lss 10000 (echo Time is up) & >nul pause
- cls & echo !t2:~-4,-2!:!t2:~-2!
-
- goto :loop
复制代码
作者: jl001002 时间: 2014-9-16 00:08
- @echo off
- %1 goto begin
-
- choice /c 123 /t 5 /d 1 /n 3>>%0
- echo 您选择的是[%errorlevel%]
-
- IF errorlevel 1 GOTO AAA1
- IF errorlevel 2 GOTO AAA2
- IF errorlevel 3 GOTO AAA3
- pause & exit
-
- :begin
- start /b "" cmd /c "%~0" :
-
- for /l %%a in (5,-1,1) do (
- cls
- echo 1,吃饭 2,睡觉 3,洗澡
- echo 还剩 %%a 秒,可选[1,2,3]
- ping /n 2 127.0.0.1 >nul
- exit /b 3>>%0
- ) 2>nul
- exit /b
-
- :AAA1
- GOTO 11111
- :AAA2
- EXIT
- :AAA3
- EXIT
-
- :11111
-
- %1 goto begin111
- choice /c 123 /t 5 /d 1 /n 3>>%0
- echo 您选择的是[%errorlevel%]
-
- IF errorlevel 1 GOTO BBB1
- IF errorlevel 2 GOTO BBB2
- IF errorlevel 3 GOTO BBB3
- pause & exit
-
- :begin111
- start /b "" cmd /c "%~0" :
-
- for /l %%b in (5,-1,1) do (
- cls
- echo 1,吃早饭 2,吃午饭 3,吃晚饭
- echo 还剩 %%b 秒,可选[1,2,3]
- ping /n 2 127.0.0.1 >nul
- exit /b 3>>%0
- ) 2>nul
- exit /b
-
- :BBB1
- echo 早上好
- pause
- :BBB2
- echo 中午好
- pause
- :BBB3
- echo 下午好
- pause
复制代码
回复 2# CrLf
出现的问题:
1,第一次选择是可以显示对话框的123选项,选择第一项后,第二次选择就没有显示可以选择的内容了,就只有光标提示,
2,如果第一次让系统自然倒计时结束,默认选择第一项,但是也没出现显示的内容
3,为了区别第一个begin ,我修改了第二个begin为begin111, 第二个倒计时时间%%a修改为%%b,这样有问题吗,
在线等,谢谢了!!!!
作者: jl001002 时间: 2014-9-16 21:01 标题: 批处理怎样在倒计时的时候选择选项,不选择则默认,有倒计时提示?
出现的问题:
1,第一次选择是可以显示对话框的123选项,选择第一项后,第二次选择就没有显示可以选择的内容了,就只有光标提示,
2,如果第一次让系统自然倒计时结束,默认选择第一项,但是也没出现显示的内容
3,为了区别第一个begin ,我修改了第二个begin为begin111, 第二个倒计时时间%%a修改为%%b,这样有问题吗,
在线等,谢谢了!!!!- @echo off
- %1 goto begin
-
- choice /c 123 /t 5 /d 1 /n 3>>%0
- echo 您选择的是[%errorlevel%]
-
- IF errorlevel 1 GOTO AAA1
- IF errorlevel 2 GOTO AAA2
- IF errorlevel 3 GOTO AAA3
- pause & exit
-
- :begin
- start /b "" cmd /c "%~0" :
-
- for /l %%a in (5,-1,1) do (
- cls
- echo 1,吃饭 2,睡觉 3,洗澡
- echo 还剩 %%a 秒,可选[1,2,3]
- ping /n 2 127.0.0.1 >nul
- exit /b 3>>%0
- ) 2>nul
- exit /b
-
- :AAA1
- GOTO 11111
- :AAA2
- EXIT
- :AAA3
- EXIT
-
- :11111
-
- %1 goto begin111
- choice /c 123 /t 5 /d 1 /n 3>>%0
- echo 您选择的是[%errorlevel%]
-
- IF errorlevel 1 GOTO BBB1
- IF errorlevel 2 GOTO BBB2
- IF errorlevel 3 GOTO BBB3
- pause & exit
-
- :begin111
- start /b "" cmd /c "%~0" :
-
- for /l %%b in (5,-1,1) do (
- cls
- echo 1,吃早饭 2,吃午饭 3,吃晚饭
- echo 还剩 %%b 秒,可选[1,2,3]
- ping /n 2 127.0.0.1 >nul
- exit /b 3>>%0
- ) 2>nul
- exit /b
-
- :BBB1
- echo 早上好
- pause
- :BBB2
- echo 中午好
- pause
- :BBB3
- echo 下午好
- pause
复制代码
作者: CrLf 时间: 2014-9-17 05:01
本帖最后由 CrLf 于 2014-9-18 02:38 编辑
刚看到消息
原先思虑不周,给出的结构不适用于多次 choice,现修改如下:- @echo off
- goto %1 begin
-
- :::::::::::[begin~choice1] start::::::::::::::::::::
- :begin
- taskkill /f /im ping.exe >nul 2>nul
- start /b "" cmd /c "%~0" :choice1
-
- for /l %%a in (5,-1,1) do (
- cls
- echo 1,吃饭 2,睡觉 3,洗澡
- echo 还剩 %%a 秒,可选[1,2,3]
- ping /n 2 127.0.0.1 >nul
- exit /b 3>>%0
- ) 2>nul
- title 1_exit
- exit /b
-
- :choice1
- choice /c 123 /t 5 /d 1 /n 3>>%0
- echo 您选择的是[%errorlevel%]
-
- IF errorlevel 3 GOTO AAA3
- IF errorlevel 2 GOTO AAA2
- IF errorlevel 1 GOTO AAA1
- pause & exit
- :::::::::::[begin~choice1] end::::::::::::::::::::
-
- :AAA1
- GOTO 11111
- :AAA2
- EXIT
- :AAA3
- EXIT
-
-
- :::::::::::[11111~choice2] start::::::::::::::::::::
- :11111
- taskkill /f /im ping.exe >nul 2>nul
- start /b "" cmd /c "%~0" :choice2
-
- for /l %%a in (5,-1,1) do (
- cls
- echo 1,吃早饭 2,吃午饭 3,吃晚饭
- echo 还剩 %%a 秒,可选[1,2,3]
- ping /n 2 127.0.0.1 >nul
- exit /b 3>>%0
- ) 2>nul
- title 2_exit
- exit /b
-
- :choice2
- choice /c 123 /t 5 /d 1 /n 3>>%0
- echo 您选择的是[%errorlevel%]
-
- IF errorlevel 3 GOTO BBB3
- IF errorlevel 2 GOTO BBB2
- IF errorlevel 1 GOTO BBB1
- pause & exit
- :::::::::::[11111~choice2] end::::::::::::::::::::
-
- :BBB1
- echo 早上好
- pause&exit
- :BBB2
- echo 中午好
- pause&exit
- :BBB3
- echo 下午好
- pause&exit
复制代码
用了一些非常规的技巧,楼主刚学估计理解不了,且依样画葫芦吧
作者: jl001002 时间: 2014-9-17 23:01
回复 2# CrLf
你好,按你写的代码运行后,如果我第一次选择吃饭,然后选择吃早饭,吃午饭,吃晚饭都可以,但是如果是选择睡觉,我的意思是直接退出软件了,但是,还是会跳到吃早饭,吃午饭,吃晚饭,你可以试试看看下,谢谢!!
作者: jl001002 时间: 2014-9-17 23:07
回复 2# CrLf
可以了,把你写的代码- IF errorlevel 1 GOTO AAA1
- IF errorlevel 2 GOTO AAA2
- IF errorlevel 3 GOTO AAA3
复制代码
换成- IF %errorlevel%==1 GOTO AAA1
- IF %errorlevel%==2 GOTO AAA2
- IF %errorlevel%==3 GOTO AAA3
复制代码
就可以了,谢谢啦
作者: CrLf 时间: 2014-9-18 02:41
回复 4# jl001002
还是建议用 IF errorlevel x GOTO AAAx,可以规避潜在的隐患,但顺序得反过来变成:- IF errorlevel 3 GOTO AAA3
- IF errorlevel 2 GOTO AAA2
- IF errorlevel 1 GOTO AAA1
复制代码
因为它判断的实际上是大等于
ERRORLEVEL number 如果最后运行的程序返回一个等于或大于
指定数字的退出编码,指定条件为 true。
作者: hnldwhm52 时间: 2014-9-19 14:41
xiexiexie!!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |