[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] 批处理怎样实现在指定时间内显示选择操作项,超过时间则自动选择一项

本帖最后由 pcl_test 于 2016-7-17 18:48 编辑

要求:1.在5秒内选择1~6的选项,如果不选择,则自动选择1选项
         2.有倒计时提示
我写了一段,可是不行,我是新手,才接触2天,请高手们指导,谢谢~~!
  1. mode con cols=50 lines=15
  2. title=启动
  3. color 2f
  4. @ECHO OFF
  5. :00000
  6. CLS
  7. set TT=5
  8. for /l %%a in (%TT%,-1,1)do (
  9. cls
  10. ECHO.
  11. ECHO  请选择!!!!!
  12. ECHO.
  13. ECHO 1.
  14. ECHO 2.         3.
  15. ECHO 4. 5.
  16. ECHO 6.退出该软件
  17. choice/c 123456 /t 4 /d 1 /m "%%a秒后自动选择1"
  18. )
  19. IF %errorlevel%==1 GOTO AAA1
  20. IF %errorlevel%==2 GOTO AAA2
  21. IF %errorlevel%==3 GOTO AAA3
  22. IF %errorlevel%==4 GOTO AAA4
  23. IF %errorlevel%==5 GOTO AAA5
  24. IF %errorlevel%==6 GOTO AAA6
复制代码

本帖最后由 CrLf 于 2014-9-15 22:34 编辑

举个栗子
  1. @echo off
  2. %1 goto begin
  3. choice /c 123456 /t 5 /d 1 /n 3>>%0
  4. echo 您选择的是[%errorlevel%]
  5. IF errorlevel 6 GOTO AAA6
  6. IF errorlevel 5 GOTO AAA5
  7. IF errorlevel 4 GOTO AAA4
  8. IF errorlevel 3 GOTO AAA3
  9. IF errorlevel 2 GOTO AAA2
  10. IF errorlevel 1 GOTO AAA1
  11. pause & exit
  12. :begin
  13. start /b "" cmd /c "%~0" :
  14. for /l %%a in (5,-1,1) do (
  15. cls
  16. echo 还剩 %%a 秒,可选[1,2,3,4,5,6]
  17. ping /n 2 127.0.0.1 >nul
  18. exit /b 3>>%0
  19. ) 2>nul
  20. exit /b
复制代码
1

评分人数

    • jl001002: 分不多,请务必再来看一下啊,谢谢额技术 + 1

TOP

回复 1# jl001002

给出两个60秒内计时例

正计时
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "secs=5" & rem 限于<60秒内计时
  4. set /a "t1=1!time:~-5,2!*100+1!time:~-2!-100, te=secs*100 + 10000"
  5. :loop
  6. set /a "t2=(1!time:~-5,2!*100+1!time:~-2! -100 - t1 + 6000) %% 6000+10000"
  7. if !t2! gtr !te! (echo Time is up) & >nul pause
  8. cls & echo !t2:~-4,-2!:!t2:~-2!
  9. goto :loop
复制代码
倒计时
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "secs=5" & rem 限于<60秒内计时
  4. set /a "t1=1!time:~-5,2!*100+1!time:~-2!-100"
  5. :loop
  6. set /a "t2=secs*100 + 10000 - (1!time:~-5,2!*100+1!time:~-2! -100 - t1 + 6000) %% 6000"
  7. if !t2! lss 10000 (echo Time is up) & >nul pause
  8. cls & echo !t2:~-4,-2!:!t2:~-2!
  9. goto :loop
复制代码

TOP

  1. @echo off
  2. %1 goto begin
  3. choice /c 123 /t 5 /d 1 /n 3>>%0
  4. echo 您选择的是[%errorlevel%]
  5. IF errorlevel 1 GOTO AAA1
  6. IF errorlevel 2 GOTO AAA2
  7. IF errorlevel 3 GOTO AAA3
  8. pause & exit
  9. :begin
  10. start /b "" cmd /c "%~0" :
  11. for /l %%a in (5,-1,1) do (
  12. cls
  13. echo 1,吃饭   2,睡觉  3,洗澡
  14. echo 还剩 %%a 秒,可选[1,2,3]
  15. ping /n 2 127.0.0.1 >nul
  16. exit /b 3>>%0
  17. ) 2>nul
  18. exit /b
  19. :AAA1
  20. GOTO 11111
  21. :AAA2
  22. EXIT
  23. :AAA3
  24. EXIT
  25. :11111
  26. %1 goto begin111
  27. choice /c 123 /t 5 /d 1 /n 3>>%0
  28. echo 您选择的是[%errorlevel%]
  29. IF errorlevel 1 GOTO BBB1
  30. IF errorlevel 2 GOTO BBB2
  31. IF errorlevel 3 GOTO BBB3
  32. pause & exit
  33. :begin111
  34. start /b "" cmd /c "%~0" :
  35. for /l %%b in (5,-1,1) do (
  36. cls
  37. echo 1,吃早饭   2,吃午饭 3,吃晚饭
  38. echo 还剩 %%b 秒,可选[1,2,3]
  39. ping /n 2 127.0.0.1 >nul
  40. exit /b 3>>%0
  41. ) 2>nul
  42. exit /b
  43. :BBB1
  44. echo 早上好
  45. pause
  46. :BBB2
  47. echo 中午好
  48. pause
  49. :BBB3
  50. echo 下午好
  51. pause
复制代码
回复 2# CrLf
出现的问题:
1,第一次选择是可以显示对话框的123选项,选择第一项后,第二次选择就没有显示可以选择的内容了,就只有光标提示,
2,如果第一次让系统自然倒计时结束,默认选择第一项,但是也没出现显示的内容
3,为了区别第一个begin ,我修改了第二个begin为begin111, 第二个倒计时时间%%a修改为%%b,这样有问题吗,
在线等,谢谢了!!!!

TOP

批处理怎样在倒计时的时候选择选项,不选择则默认,有倒计时提示?

出现的问题:
1,第一次选择是可以显示对话框的123选项,选择第一项后,第二次选择就没有显示可以选择的内容了,就只有光标提示,
2,如果第一次让系统自然倒计时结束,默认选择第一项,但是也没出现显示的内容
3,为了区别第一个begin ,我修改了第二个begin为begin111, 第二个倒计时时间%%a修改为%%b,这样有问题吗,
在线等,谢谢了!!!!
  1. @echo off
  2. %1 goto begin
  3. choice /c 123 /t 5 /d 1 /n 3>>%0
  4. echo 您选择的是[%errorlevel%]
  5. IF errorlevel 1 GOTO AAA1
  6. IF errorlevel 2 GOTO AAA2
  7. IF errorlevel 3 GOTO AAA3
  8. pause & exit
  9. :begin
  10. start /b "" cmd /c "%~0" :
  11. for /l %%a in (5,-1,1) do (
  12. cls
  13. echo 1,吃饭   2,睡觉  3,洗澡
  14. echo 还剩 %%a 秒,可选[1,2,3]
  15. ping /n 2 127.0.0.1 >nul
  16. exit /b 3>>%0
  17. ) 2>nul
  18. exit /b
  19. :AAA1
  20. GOTO 11111
  21. :AAA2
  22. EXIT
  23. :AAA3
  24. EXIT
  25. :11111
  26. %1 goto begin111
  27. choice /c 123 /t 5 /d 1 /n 3>>%0
  28. echo 您选择的是[%errorlevel%]
  29. IF errorlevel 1 GOTO BBB1
  30. IF errorlevel 2 GOTO BBB2
  31. IF errorlevel 3 GOTO BBB3
  32. pause & exit
  33. :begin111
  34. start /b "" cmd /c "%~0" :
  35. for /l %%b in (5,-1,1) do (
  36. cls
  37. echo 1,吃早饭   2,吃午饭 3,吃晚饭
  38. echo 还剩 %%b 秒,可选[1,2,3]
  39. ping /n 2 127.0.0.1 >nul
  40. exit /b 3>>%0
  41. ) 2>nul
  42. exit /b
  43. :BBB1
  44. echo 早上好
  45. pause
  46. :BBB2
  47. echo 中午好
  48. pause
  49. :BBB3
  50. echo 下午好
  51. pause
复制代码

TOP

本帖最后由 CrLf 于 2014-9-18 02:38 编辑

刚看到消息
原先思虑不周,给出的结构不适用于多次 choice,现修改如下:
  1. @echo off
  2. goto %1 begin
  3. :::::::::::[begin~choice1]  start::::::::::::::::::::
  4. :begin
  5. taskkill /f /im ping.exe >nul 2>nul
  6. start /b "" cmd /c "%~0" :choice1
  7. for /l %%a in (5,-1,1) do (
  8. cls
  9. echo 1,吃饭   2,睡觉  3,洗澡
  10. echo 还剩 %%a 秒,可选[1,2,3]
  11. ping /n 2 127.0.0.1 >nul
  12. exit /b 3>>%0
  13. ) 2>nul
  14. title 1_exit
  15. exit /b
  16. :choice1
  17. choice /c 123 /t 5 /d 1 /n 3>>%0
  18. echo 您选择的是[%errorlevel%]
  19. IF errorlevel 3 GOTO AAA3
  20. IF errorlevel 2 GOTO AAA2
  21. IF errorlevel 1 GOTO AAA1
  22. pause & exit
  23. :::::::::::[begin~choice1]  end::::::::::::::::::::
  24. :AAA1
  25. GOTO 11111
  26. :AAA2
  27. EXIT
  28. :AAA3
  29. EXIT
  30. :::::::::::[11111~choice2]  start::::::::::::::::::::
  31. :11111
  32. taskkill /f /im ping.exe >nul 2>nul
  33. start /b "" cmd /c "%~0" :choice2
  34. for /l %%a in (5,-1,1) do (
  35. cls
  36. echo 1,吃早饭   2,吃午饭 3,吃晚饭
  37. echo 还剩 %%a 秒,可选[1,2,3]
  38. ping /n 2 127.0.0.1 >nul
  39. exit /b 3>>%0
  40. ) 2>nul
  41. title 2_exit
  42. exit /b
  43. :choice2
  44. choice /c 123 /t 5 /d 1 /n 3>>%0
  45. echo 您选择的是[%errorlevel%]
  46. IF errorlevel 3 GOTO BBB3
  47. IF errorlevel 2 GOTO BBB2
  48. IF errorlevel 1 GOTO BBB1
  49. pause & exit
  50. :::::::::::[11111~choice2]  end::::::::::::::::::::
  51. :BBB1
  52. echo 早上好
  53. pause&exit
  54. :BBB2
  55. echo 中午好
  56. pause&exit
  57. :BBB3
  58. echo 下午好
  59. pause&exit
复制代码
用了一些非常规的技巧,楼主刚学估计理解不了,且依样画葫芦吧
1

评分人数

    • jl001002: 还是不行,你看看我的回帖,谢谢技术 + 1

TOP

回复 2# CrLf


    你好,按你写的代码运行后,如果我第一次选择吃饭,然后选择吃早饭,吃午饭,吃晚饭都可以,但是如果是选择睡觉,我的意思是直接退出软件了,但是,还是会跳到吃早饭,吃午饭,吃晚饭,你可以试试看看下,谢谢!!

TOP

回复 2# CrLf


    可以了,把你写的代码
  1. IF errorlevel 1 GOTO AAA1
  2. IF errorlevel 2 GOTO AAA2
  3. IF errorlevel 3 GOTO AAA3
复制代码
换成
  1. IF %errorlevel%==1 GOTO AAA1
  2. IF %errorlevel%==2 GOTO AAA2
  3. IF %errorlevel%==3 GOTO AAA3
复制代码
就可以了,谢谢啦

TOP

回复 4# jl001002


    还是建议用 IF errorlevel x GOTO AAAx,可以规避潜在的隐患,但顺序得反过来变成:
  1. IF errorlevel 3 GOTO AAA3
  2. IF errorlevel 2 GOTO AAA2
  3. IF errorlevel 1 GOTO AAA1
复制代码
因为它判断的实际上是大等于
ERRORLEVEL number 如果最后运行的程序返回一个等于或大于
                   指定数字的退出编码,指定条件为 true。

TOP

xiexiexie!!!

TOP

返回列表