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语句改为if-else,并与
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