标题: [其他] [已解决]批处理goto的跳转bug [打印本页]
作者: 00snowman00 时间: 2018-12-13 15:25 标题: [已解决]批处理goto的跳转bug
本帖最后由 00snowman00 于 2018-12-21 15:45 编辑
- @echo off
- :index
- set /p input=您的选择是:
-
- if "%input%"=="1" goto :1
- if "%input%"=="2" goto :2
- pause
- :1
- echo 123
- pause
- goto :index
- :2
- echo 456
- pause
- goto :index
复制代码
rem 如上所示,让用户选择时,直接按回车就退出了。但是如果你选了一个,比如说是2,那么它显示456后按任意键自动跳回主菜单。 这个时候如果在主菜单直接按回车,就会自动跳到2的模块里。。显示456 这是为什么???请教高手!
作者: happy886rr 时间: 2018-12-13 16:09
你的标题写错了
作者: tigerpower 时间: 2018-12-13 16:26
pause /?
exit /?
作者: flashercs 时间: 2018-12-13 16:32
- @echo off
- :index
- set input=
- set /p input=您的选择是:
-
- if "%input%"=="1" goto 1
- if "%input%"=="2" goto 2
- goto index
- pause
- :1
- echo 123
- pause
- goto index
- :2
- echo 456
- pause
- goto index
复制代码
作者: yhcfsr 时间: 2018-12-13 16:36
参详下,思考下为什么- @echo off
- :index
- cls
- set /p "input=您的选择是:"
-
- if "%input%"=="1" call :1
- if "%input%"=="2" call :2
- if "%input%"=="" exit
- set "input="
- pause&goto :index
-
- :1
- echo 123
- exit /b
-
- :2
- echo 456
- exit /b
复制代码
作者: 00snowman00 时间: 2018-12-13 19:03
回复 5# yhcfsr
大神,用了你的方法确实可以了。
我真的思考了,但是还是不太明白,还请您赐教:
1、set /p "input=您的选择是:"
为什么input= 写在了引号中,居然也可以
2、set "input="
这一句是何用意?
3、还有我查了exit /b,也百度了,但还是不明其具体的妙处。希望能得到您的详解。
拜谢
作者: 00snowman00 时间: 2018-12-13 19:46
回复 5# yhcfsr
我终于参透了!!!太感谢你了,谢谢热心的高手!
作者: jiavip 时间: 2018-12-23 06:59
回复 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,还不如执行另外一个命令,或返回,或退出。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |