Board logo

标题: [特效代码] [已解决]批处理菜单输入选择后没有任何反应 [打印本页]

作者: hdw    时间: 2009-8-5 21:33     标题: [已解决]批处理菜单输入选择后没有任何反应

  1. @echo off
  2. set num=
  3. set answer=
  4. :begin
  5. cls
  6. echo.
  7. echo.
  8. echo ============================================================
  9. echo       1/选择输入1将显示当前时间
  10. echo       2/选择输入2将显示当前日期
  11. echo       3/选择输入3将列出当前目录文件列表
  12. echo       4/退出该系统
  13. echo ============================================================
  14. echo.&echo.
  15. set /p num=请输入要选择的项目:
  16. if "%num%"=="1"(
  17. cls
  18. echo.
  19. echo.
  20. echo 显示当前时间为:
  21. time /t
  22. pause
  23. goto begin
  24. )
  25. if "%num%"=="2"(
  26. cls
  27. echo.
  28. echo.
  29. echo 显示当前日期为:
  30. date /t
  31. pause
  32. goto begin
  33. )
  34. if "%num%"=="3"(
  35. cls
  36. echo.
  37. echo.
  38. echo 显示目录下文件列表为:
  39. dir /w
  40. pause
  41. goto begin
  42. )
  43. if "%num%"=="4"(
  44. cls
  45. echo.
  46. echo.
  47. echo.
  48. pause
  49. set /p answer=是否真的要推出该系统(y/n)?
  50. pause
  51. if "%answer%"=="Y"(
  52. pause
  53. goto end
  54. )
  55. if "%answer%"=="N"(
  56. pause
  57. goto begin
  58. )
  59. )
  60. echo.
  61. echo.
  62. echo    你输入了%num%将要退出该系统
  63. pause
  64. set num=
  65. set answer=
  66. exit
复制代码

[ 本帖最后由 hdw 于 2009-8-7 08:44 编辑 ]
作者: defanive    时间: 2009-8-5 22:13

if "%num%"=="1"(

这些语句中应该在(前加个空格。。。
作者: BBCC    时间: 2009-8-5 22:17

语法问题……话说下次缩进一下

其实可以用 xxx.bat 2>err.txt 的命令来查看错误信息滴~·
作者: czl1378    时间: 2009-8-5 22:17

楼主,所有的if语句块括号前都加个空格。比如 if "%num%"=="1"( ,应该是这样:if "%num%"=="1" ( 。

还有,set /p answer=是否真的要推出该系统(y/n)? 这里的y/n不能在括号内,不然系统会以为你的前一个if语句块结束了。你可以换成[y/n]?。
作者: januapr    时间: 2009-8-5 23:17

出错的地方楼上的朋友都已经指出了,呵呵

在批处设计方面我想说一下个人看法:
在选择过滤方面应该要加强一下,
set /p num=请输入要选择的项目:
这里如果用户不按要求输入了非1,2,3,4的选项怎么办?

set /p answer=是否真的要推出该系统[y/n]?
这一句后面的
if "%answer%"=="Y" (     和 if "%answer%"=="N" (
这两个语句中,是否用大小的Y和N?如果用大写的话,当用户不想退出而按了n 时,结果还是退出了。
作者: hdw    时间: 2009-8-6 13:14     标题: 谢谢各位指教

我说嘛,命令输的都没问题,怎么就是无法正确运行。原来是缺少个空格。谢谢大家的帮助啊!
作者: hdw    时间: 2009-8-6 16:26     标题: 改进1

对于如果输入1 2 3 4以外的数字可在“set /p num=请输入要选择的项目:”后插入以下代码进行判断并提示重新输入
  1. if not "%num%"=="1" (
  2. if not "%num%"=="2" (
  3.     if not "%num%"=="3" (
  4.        if not "%num%"=="4" (
  5.               cls
  6.               echo.&echo.
  7.               echo.
  8.               echo 您的输入不符合要求,请重新输入
  9.               echo.
  10.               pause
  11.               goto begin
  12.         )
  13.     )
  14. )
  15. )
复制代码

作者: xxx    时间: 2009-8-6 16:34     标题: 回复 7楼 的帖子

其实不用那么多层判断的,想想还有什么其他办法不?
作者: batman    时间: 2009-8-6 18:08

楼主可参考下面的代码来修改主:
  1. @echo off
  2. :begain
  3. set /p select=请输入你的选择(1 2 3):
  4. if not defined select cls&goto begain
  5. if %select% geq 1 if %select% leq 3 (
  6.    goto %select%
  7.    ) else (
  8.    cls&goto begain
  9. )
  10. :1
  11. echo bathome&goto end
  12. :2
  13. echo batman&goto end
  14. :3
  15. echo bbs.bathome.net
  16. :end
  17. pause>nul
复制代码

[ 本帖最后由 batman 于 2009-8-6 18:11 编辑 ]
作者: netbenton    时间: 2009-8-6 18:41

这个是我比较喜欢用的方法。
  1. @echo off&setlocal enabledelayedexpansion
  2. set "menu= 1 2 3 4 q "&在这里增改选项,注意前后都要有空格
  3. :loop
  4. cls
  5. echo.
  6. echo.
  7. echo ============================================================
  8. echo       1/选择输入1将显示当前时间
  9. echo       2/选择输入2将显示当前日期
  10. echo       3/选择输入3将列出当前目录文件列表
  11. echo       q/退出该系统
  12. echo ============================================================
  13. echo.&echo.
  14. set /p in=请输入要选择的项目:
  15. if "!menu: %in% =!" neq "!menu!" goto :m%in%
  16. rem 如果输入的字符存在menu中,则表达式不想等(neq),即成立,就执行goto :m%in%
  17. goto :loop
  18. :m1
  19. echo %time%&goto :loop
  20. :m2
  21. echo %date%&goto :loop
  22. :m3
  23. dir /b&goto :loop
  24. :mq
  25. echo 退出&pause
复制代码

[ 本帖最后由 netbenton 于 2009-8-6 20:48 编辑 ]
作者: hdw    时间: 2009-8-6 19:46

能否解释一下if "!menu: %in% =!" neq "!menu!" goto :m%in%
作者: hdw    时间: 2009-8-6 19:48

真是条条大路通罗马啊
作者: batman    时间: 2009-8-6 20:35

如问题得到了解决,请在主动在标题上加上[已解决]字样。。。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2