Debugging 我的批处理脚本没有';不行。谁能告诉我为什么?
我的脚本需要帮助。所有的东西都不停地掉下来,不做后继动作。你能帮忙吗Debugging 我的批处理脚本没有';不行。谁能告诉我为什么?,debugging,command-prompt,batch-file,Debugging,Command Prompt,Batch File,我的脚本需要帮助。所有的东西都不停地掉下来,不做后继动作。你能帮忙吗 @ECHO OFF goto joshua :joshua Echo Hello my name is Joshua. echo What is yours? set /p name= cls Echo Hello %name%. cls Echo How are you? set /p feeling= cls echo Is this good? echo Im sorry I am still learning huma
@ECHO OFF
goto joshua
:joshua
Echo Hello my name is Joshua.
echo What is yours?
set /p name=
cls
Echo Hello %name%.
cls
Echo How are you?
set /p feeling=
cls
echo Is this good?
echo Im sorry I am still learning human feelings.
set /p humanfeelings=Yes/No
if %humanfeelings%==Yes goto Good
if %humanfeelings%==No goto Bad
cls
:Good
Echo Well that is pleasent.
Echo Would you like to play a game %name%?
set /p answer=Yes/No
if %answer%==Yes goto startmenu
if %answer%== No goto quit
cls
:Bad
echo That is not good.
echo Would you like to play a game %name%?
set /p answera=Yes/No
if %answera%==Yes goto startmenu
if %answera%== No goto later
cls
:startmenu
start menu.bat
cls
:later
Echo That is fine %name%, maybe later
pause
exit
您是否根据提示键入完整答案“是”或“否”?如果缩写为Y和N,则只会存储那些初始字符。好的,从这里我看到的错误是,在处理好/坏的结果中,您不会跳转到任何地方。这意味着无论您键入“是”或“否”,Bad/startmenu/later块总是一个接一个地执行。这就是你的问题吗?然后再添加一些goto-s。尝试删除这些行中单词
No
之前的空格:
if %answer%== No goto quit
及
与我们中的许多人一样,批处理解释器已经过时了,而且很挑剔。:-) 带有行号的原始代码:
1 : @ECHO OFF
2 : goto joshua
3 : :joshua
4 : Echo Hello my name is Joshua.
5 : echo What is yours?
6 : set /p name=
7 : cls
8 : Echo Hello %name%.
9 : cls
10: Echo How are you?
11: set /p feeling=
12: cls
13: echo Is this good?
14: echo Im sorry I am still learning human feelings.
15: set /p humanfeelings=Yes/No
16: if %humanfeelings%==Yes goto Good
17: if %humanfeelings%==No goto Bad
18: cls
19: :Good
20: Echo Well that is pleasent.
21: Echo Would you like to play a game %name%?
22: set /p answer=Yes/No
23: if %answer%==Yes goto startmenu
24: if %answer%== No goto quit
25: cls
26: :Bad
27: echo That is not good.
28: echo Would you like to play a game %name%?
29: set /p answera=Yes/No
30: if %answera%==Yes goto startmenu
31: if %answera%== No goto later
32: cls
33: :startmenu
34: start menu.bat
35: cls
36: :later
37: Echo That is fine %name%, maybe later
38: pause
39: exit
- 第二行:
不需要,因为joshua在下一行李>转到joshua
- 第9行:
删除前面的回显(隐藏cls
)Hello%name%。
- 第16行、第17行、第30行和第31行:应引用变量,否则将输入意外值(例如,
或hell 否!!!
)将导致语法错误是,我是。
- 第18、25和32行:没有默认情况,因此如果答案既不是“是”也不是“否”,脚本将继续下一行
if/I
进行不区分大小写的字符串比较。尝试以下修改:
@echo off
:joshua
echo Hello. My name is Joshua.
echo What is yours?
set /p name=
cls
echo Hello, %name%.
echo How are you?
set /p feeling=
cls
echo Is this good?
echo I'm sorry. I am still learning human feelings.
set /p humanfeelings=Yes/No
if /I "%humanfeelings%"=="yes" (
goto Good
) else (
goto Bad
)
cls
:Good
echo Well that is pleasant.
goto AskPlay
:Bad
echo That is not good.
:AskPlay
echo Would you like to play a game, %name%?
set /p answera=Yes/No
if /I "%answera%"=="yes" (
goto startmenu
) else (
goto later
)
cls
:startmenu
start menu.bat
cls
:later
echo That is fine, %name%. Maybe later!
pause
exit
我看到一堵巨大的未格式化代码墙。请一定要把你的帖子修好。至少提供换行符。好的,对不起,我没有从你当前的帖子中删除代码。按“格式”工具栏上的“代码”按钮,该按钮看起来像:
{}
。然后复制粘贴你的原始代码。为什么会这样做呢?抱歉,这是我第一次使用这个网站,所以你看到脚本中有任何问题吗?是的,我使用的是和否,就像我在SET中写的一样。是的,什么是“goto-s”对不起,我很久没有这样做了,我没有更新所有的命令“Goto-s”是“Goto”语句,如示例第2行中的语句。因此,它们是指令修改脚本执行流。好吧,添加更多类似Goto joshua(无变量)的内容如果有人可以重写它,如果你看到一个问题,因为我真的不知道你们都在说什么,谢谢批处理文件中的命令是一行一行地执行的。当你使用goto
命令时,你通过告诉解释器下一步执行哪一行来改变这种行为(通过使用此goto
语句指定标签名称;标签是以冒号开头的行)。标签本身不起任何作用,如果解释器读取到包含标签的行,它就会跳过它。例如,要使代码按预期工作,您可能需要在脚本中添加:end
标签作为最后一行,并在:Good
,:Bad
和:startmenu
行之前添加转到end
。这对li有帮助ttle但我认为我的脚本中有更多的缺陷,但非常感谢您。空格在“否”前后都有效,批处理解释器很旧,但并不陈旧:-@jeb,实际上,这里的空格很重要。批处理解释器会将answera
与“否”(与“否”不匹配)进行比较。试试看。@bstn,我试过了,效果很好。这是真的:IF NO==NO(echo true)ELSE(echo false)@jeb,你是对的。我的错。我不知道为什么我认为它不起作用。也许我在测试失败时不小心用了小写“NO”,在测试成功时用了正确的大小写“NO”。@ME1:行号被删除了。享受吧
@echo off
:joshua
echo Hello. My name is Joshua.
echo What is yours?
set /p name=
cls
echo Hello, %name%.
echo How are you?
set /p feeling=
cls
echo Is this good?
echo I'm sorry. I am still learning human feelings.
set /p humanfeelings=Yes/No
if /I "%humanfeelings%"=="yes" (
goto Good
) else (
goto Bad
)
cls
:Good
echo Well that is pleasant.
goto AskPlay
:Bad
echo That is not good.
:AskPlay
echo Would you like to play a game, %name%?
set /p answera=Yes/No
if /I "%answera%"=="yes" (
goto startmenu
) else (
goto later
)
cls
:startmenu
start menu.bat
cls
:later
echo That is fine, %name%. Maybe later!
pause
exit