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

[特效代码] [已解决]根据用户输入运行指定代码的批处理IF判断没有运行

还是先前发过的代码
  1. @echo off
  2. :begin
  3. cls
  4. color 5f
  5. echo.
  6. echo.
  7. echo                  批处理菜单
  8. echo.
  9. echo ============================================================
  10. echo       1/选择输入1将显示当前时间
  11. echo       2/选择输入2将显示当前日期
  12. echo       3/选择输入3将列出当前目录文件列表
  13. echo       4/退出该系统
  14. echo ============================================================
  15. echo.&echo.
  16. set /p num=请输入要选择的项目:
  17. if not "%num%"=="1" (
  18.    if not "%num%"=="2" (
  19.       if not "%num%"=="3" (
  20.          if not "%num%"=="4" (
  21.                 cls
  22.                 echo.&echo.
  23.                 echo.
  24.                 echo 您的输入不符合要求,请重新输入
  25.                 echo.
  26.                 pause
  27.                 goto begin
  28.          )
  29.       )
  30.    )
  31. )
  32. if "%num%"=="1" (
  33. cls
  34. echo.
  35. echo.
  36. echo 显示当前时间为:
  37. time /t
  38. pause
  39. goto begin
  40. )
  41. if "%num%"=="2" (
  42. cls
  43. echo.
  44. echo.
  45. echo 显示当前日期为:
  46. date /t
  47. pause
  48. goto begin
  49. )
  50. if "%num%"=="3" (
  51. cls
  52. echo.
  53. echo.
  54. echo 显示目录下文件列表为:
  55. dir /w
  56. pause
  57. goto begin
  58. )
  59. if "%num%"=="4" (
  60. cls
  61. echo.
  62. echo.
  63. echo 是否真的要退出该系统[y/n]
  64. set /p answer=
  65. if "%answer%"=="Y"  (pause&goto end)
  66. if "%answer%"=="y"  (pause&goto end)
  67. if "%answer%"=="N"  (
  68.         cls
  69.         echo 您将返回菜单主页面
  70.         pause
  71.         goto begin
  72.      )
  73. if "%answer%"=="n"  (
  74.         cls
  75.         echo 您将返回菜单主页面
  76.         pause
  77.         goto begin
  78.      )
  79. )
  80. :end
  81. cls
  82. echo.
  83. echo.
  84. echo    你输入了%num%将要退出该系统
  85. pause
  86. set num=
  87. set answer=
  88. exit
复制代码
下面的这段代码单拿出来就可以运行,但是放到上面就没有进行判断而是直接退出了,问题不知道出在哪里
  1. echo 是否真的要退出该系统[y/n]
  2. set /p answer=
  3. if "%answer%"=="Y"  (pause&goto end)
  4. if "%answer%"=="y"  (pause&goto end)
  5. if "%answer%"=="N"  (
  6.         cls
  7.         echo 您将返回菜单主页面
  8.         pause
  9.         goto begin
  10.      )
  11. if "%answer%"=="n"  (
  12.         cls
  13.         echo 您将返回菜单主页面
  14.         pause
  15.         goto begin
  16.      )
复制代码

[ 本帖最后由 hdw 于 2009-8-8 15:41 编辑 ]
1

评分人数

    • keen: 感谢主动给标题标注[已解决]字样PB + 2

回复 1楼 的帖子

if "%num%"=="4" (
cls
echo.
echo.
echo 是否真的要退出该系统[y/n]
set /p answer=
if "%answer%"=="Y"  (pause&goto end)
if "%answer%"=="y"  (pause&goto end)
if "%answer%"=="N"  (
        cls
        echo 您将返回菜单主页面
        pause
        goto begin
     )
if "%answer%"=="n"  (
        cls
        echo 您将返回菜单主页面
        pause
        goto begin
     )
)


改成下面的样子:
  1. if "%num%"=="4" (
  2. cls
  3. echo.
  4. echo.
  5. echo 是否真的要退出该系统[y/n]
  6. set /p answer=
  7. )
  8. if "%answer%"=="Y"  (pause&goto end)
  9. if "%answer%"=="y"  (pause&goto end)
  10. if "%answer%"=="N"  (
  11.         cls
  12.         echo 您将返回菜单主页面
  13.         pause
  14.         goto begin
  15.      )
  16. if "%answer%"=="n"  (
  17.         cls
  18.         echo 您将返回菜单主页面
  19.         pause
  20.         goto begin
  21.      )
复制代码
(*^_^*)

TOP

是不是放在里面就有语法错误,无法执行啊?还是另有原因?

TOP

回复 3楼 的帖子

用括号包括所有的句子,批处理运行时,会把所有的句子当成一句,因为批处理有预读机制。
当%answer%包含在括号中时,在预读时,会直接找寻整个if语句前,是否对answer的变量赋值,没有赋值的话,在预读if语句时,就会给变量answer赋值为空,就是没有值赋给它。所以在执行时
  1. if "%answer%"=="Y"  (pause&goto end)
  2. if "%answer%"=="y"  (pause&goto end)
  3. if "%answer%"=="N"  (
  4.         cls
  5.         echo 您将返回菜单主页面
  6.         pause
  7.         goto begin
  8.      )
  9. if "%answer%"=="n"  (
  10.         cls
  11.         echo 您将返回菜单主页面
  12.         pause
  13.         goto begin
  14.      )
复制代码
就会变成:
  1. if ""=="Y"  (pause&goto end)
  2. if ""=="y"  (pause&goto end)
  3. if ""=="N"  (
  4.         cls
  5.         echo 您将返回菜单主页面
  6.         pause
  7.         goto begin
  8.      )
  9. if ""=="n"  (
  10.         cls
  11.         echo 您将返回菜单主页面
  12.         pause
  13.         goto begin
  14.      )
复制代码
这样的话,就不会执行跳转到begin或跳转到end。
而是执行到if语句的下面一行,就是:end段。

以后遇到这种情况,可以把@echo off去掉。把所有的cls去掉,执行,看执行过程中,那儿出错了。

[ 本帖最后由 keen 于 2009-8-8 12:44 编辑 ]
(*^_^*)

TOP

哦明白了。谢谢

TOP

晕!
  一大半看不懂!
    看来还得努力!
我们觉得崖畔的鲜花很美,那是因为它们敢于踏出迈向天空的一步!

TOP

返回列表