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

[其他] [已解决]批处理goto的跳转bug

本帖最后由 00snowman00 于 2018-12-21 15:45 编辑
  1. @echo off
  2. :index
  3. set /p input=您的选择是:
  4. if "%input%"=="1" goto :1
  5. if "%input%"=="2" goto :2
  6. pause
  7. :1
  8. echo 123
  9. pause
  10. goto :index
  11. :2
  12. echo 456
  13. pause
  14. goto :index
复制代码
rem 如上所示,让用户选择时,直接按回车就退出了。但是如果你选了一个,比如说是2,那么它显示456后按任意键自动跳回主菜单。  这个时候如果在主菜单直接按回车,就会自动跳到2的模块里。。显示456    这是为什么???请教高手!

你的标题写错了

TOP

pause /?
exit /?

TOP

  1. @echo off
  2. :index
  3. set input=
  4. set /p input=您的选择是:
  5. if "%input%"=="1" goto 1
  6. if "%input%"=="2" goto 2
  7. goto index
  8. pause
  9. :1
  10. echo 123
  11. pause
  12. goto index
  13. :2
  14. echo 456
  15. pause
  16. goto index
复制代码

TOP

参详下,思考下为什么
  1. @echo off
  2. :index
  3. cls
  4. set /p "input=您的选择是:"
  5. if "%input%"=="1" call :1
  6. if "%input%"=="2" call :2
  7. if "%input%"=="" exit
  8. set "input="
  9. pause&goto :index
  10. :1
  11. echo 123
  12. exit /b
  13. :2
  14. echo 456
  15. exit /b
复制代码
QQ 33892006

TOP

回复 5# yhcfsr


    大神,用了你的方法确实可以了。
    我真的思考了,但是还是不太明白,还请您赐教:
    1、set /p "input=您的选择是:"
     为什么input= 写在了引号中,居然也可以
    2、set "input="
     这一句是何用意?
    3、还有我查了exit /b,也百度了,但还是不明其具体的妙处。希望能得到您的详解。

   拜谢

TOP

回复 5# yhcfsr


    我终于参透了!!!太感谢你了,谢谢热心的高手!

TOP

回复 7# 00snowman00
解释很简单,,,,,
因为之前脚本赋予了 “input” 变量,GOTO 跳回 :index 标签的时候,变量还是存在的,
所以在
:index
标签前添加一句
set input=
把 “input” 变量清空。

,,至于直接按回车就退出,那是因为脚本在“PAUSE”之后没有可循环语句所以退出。
----------------------
@echo off
:index
set /p input=您的选择是:
if "%input%"=="1" goto :1
if "%input%"=="2" goto :2
pause
,,,
-----
把第一个 PAUSE 换成 GOTO index 跳回前面去就可以,这是一个纠错思路。
因为“input”变量不符合 IF 判断的变量,所以可以直接返回 :index 标签去。,
且第一个PAUSE是没必要存在的,都没有IF符合条件的变量还暂停个P,还不如执行另外一个命令,或返回,或退出。

TOP

返回列表