批处理set /p 给我玩死了

1.bat:::===========================================@echooffifexist1.batcall:cont:cont... 1.bat:
::===========================================
@echo off
if exist 1.bat call :cont

:cont
set /p input= q:退出 回车:继续 , 请选择:
if "%input%" == "q" (goto quitt)

:quitt
echo 退出 & pause>nul
exit
goto :eof

echo 继续运行 & pause>nul
::===========================================
此代码保存为1.bat后为什么不可以运行,或者说运行不正常?
输入q,看似正常,但输入其他,则也会执行quitt里面的?
另外,请问 goto :eof 有什么用
我加上后,发现 程序执行了两遍
代码是手敲的,您说的 input=后面不加空格,我测试代码里去掉空格,但是发到这里是手敲的,又习惯加上了,可没空格还是有问题
展开
 我来答
百度网友8764dc4
2010-11-14 · TA获得超过7193个赞
知道大有可为答主
回答量:5364
采纳率:66%
帮助的人:7013万
展开全部
问题不在于 input 后面有没有空格。。。就算有空格,语句也是正常的。。set /p 是以用户输入的内容为值,= 后面写入的内容,是提示内容,只有用户在控制台输入的内容才是变量的值

这个bat,错就错在不理解批处理的执行过程。。。。语法没错,但就是没有理解到批处理是怎么样执行的。。。

@echo off
if exist 1.bat call :cont 如果存在 1.bat 这个文件,就调用 cont 这个子程序。。。。但是,错就错在 comt 放置的位置不对

CMD 执行了 if 后,存在 1.bat 文件,就调用 cont 这个子程序。。。貌似没错。。。但是,如果不存在 1.bat 文件呢?这条if 就不成立,也就不会调用 cont 程序了

但是,CMD继续执行下面语句:

:cont
set /p input= q:退出 回车:继续 , 请选择:
if "%input%" == "q" (goto quitt)

cont,在这里,会被CMD执行,所以,不管你上面那条 if exist 1.bat 是否成立,都会被执行 cont 子程序,而且,当存在 1.bat时,cont 会被执行两次

而 if 判断用户输入,下面的程序,又放错位置。。。当输入 q 时,if 成立,程序退出。。。。。而当输入非q时,if不成立。。。依然会执行下面的 quitt 子程序

:quitt
echo 退出 & pause>nul
exit
goto :eof goto 在这里,多余的。。上面都exit退出了,何必多此一举??

echo 继续运行 & pause>nul

子程序,都必须放在主程序的最后面。。。而且,每个子程序,都必须使用 goto :eof 来将控制权交还给主程序。。。

@echo off

if exist 1.bat call :cont
echo 继续运行 & pause>nul
exit

::上面这个是主程序

:cont
set /p input= q:退出 回车:继续 , 请选择:
if "%input%" == "q" (goto quitt)
goto cont

::添加一个跳转,当输入不是q时,依然返回重新输入

:quitt
echo 退出 & pause>nul
exit
escortmnm
2010-11-14 · TA获得超过3393个赞
知道大有可为答主
回答量:1890
采纳率:0%
帮助的人:3279万
展开全部
不是代码错误,只是你没理解到标签的用法:
在你的代码中如果输入其他代码,打个比方输入了m,那么if语句没判断到满足的条件,所以跳过if继续执行,由于再也没有跳转,而且下一跳语句是一个标签,它执行了标签。这里标签并不是一个程序块,而是正常的语句。所以不管你输入了什么,他都会执行到这个标签。
正确的做法是在if语句后面加一条跳转语句goto :eof,意思就是跳转到结尾。

::══代══码══开══始═══
@echo off
if exist 1.bat call :cont
:cont
set /p input=q:退出; 回车:继续; 请选择:
if "%input%" == "q" (goto quitt)
goto :end
:quitt
cls&echo 退出 & pause>nul
exit
goto :end
:end
cls&echo 继续运行 & pause>nul
::Coded By escortmnm from VBS团队
::══代══码══结══束═══

按照你的意思,我修改了一下,你看看是不是这个效果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
blader101112
2010-11-14
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
只有if,没有else ,那它当然无论如何都要走下去。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式