Batch file 转到意外错误

Batch file 转到意外错误,batch-file,Batch File,我正在尝试使用批处理脚本编写一个基本的琐事游戏,在我的笔记本电脑上的DOS CMD中运行。这只是一个实验性的东西,所以我可以多练习使用批处理脚本 第一个问题将毫无问题地执行,但我无法执行第二个问题。它继续说,“在这个时候出人意料”。为了解决这个问题,我需要看些什么吗 谢谢你的帮助 代码: @echo off color 02 title PaleScream's Trivia Quiz echo. echo - - - - - - - - - - - - - - - echo. echo We

我正在尝试使用批处理脚本编写一个基本的琐事游戏,在我的笔记本电脑上的DOS CMD中运行。这只是一个实验性的东西,所以我可以多练习使用批处理脚本

第一个问题将毫无问题地执行,但我无法执行第二个问题。它继续说,“在这个时候出人意料”。为了解决这个问题,我需要看些什么吗

谢谢你的帮助

代码:

@echo off
color 02
title PaleScream's Trivia Quiz
echo.
echo - - - - - - - - - - - - - - - 
echo.
echo Welcome to PaleScream's Trivia Quiz
echo.
echo - - - - - - - - - - - - - - - 
echo.
pause
cls
echo Who is that little green guy in Star Wars
echo 1 Yoda
echo 2 Darth Vader
echo 3 Luke
set /p starwars=choice1~3 
if %starwars%==1 goto Correct
if %starwars%==2 goto Incorrect
if %starwars%==3 goto Incorrect
:Correct
echo You got it right!!
pause
cls
goto continued
:Incorrect
echo Sorry you got it wrong!!
pause
goto end
:continued
echo What is the national animal of Scotland?
echo 1 Reindeer
echo 2 Unicorn
echo 3 Valais Blackneck Goat
set /p ScotlandAnimal = choice1~3 
if %ScotlandAnimal%==1 goto incorrect 
if %ScotlandAnimal%==2 goto correct
if %ScotlandAnimal%==3 goto incorrect
echo ----------------------------------
:correct
echo You got it right!!
pause 
goto continued
:incorrect
echo Sorry, try again.
pause
goto end
:continued
cls
echo you made it to the end
pause
:end

您的错误是有一次尾部有一个带有var名称的空格
set/p ScotlandAnimal=choice1~3

和内容,然后检查不带尾随空格的var名称
如果%ScotlandAnimal%==1转到错误的位置

由于没有空格的var不存在,它的计算结果为零,因此cmd解释器会看到
if==1转到不正确的位置


这是无效的语法。

您的错误是有一次尾随空格带有var名称
set/p ScotlandAnimal=choice1~3

和内容,然后检查不带尾随空格的var名称
如果%ScotlandAnimal%==1转到错误的位置

由于没有空格的var不存在,它的计算结果为零,因此cmd解释器会看到
if==1转到不正确的位置


这是无效的语法。

set/p
更改为
Choice
,并更改结构,使您不需要将多个
goto
转换为包含相同/类似输出文本的标签,可能会更好地为您服务

@Echo关闭
颜色02
标题:Paleshray的琐事小测验
回音(
回声(---------------
回音(
Echo(欢迎来到Paleshray的琐事小测验
回音(
回声(---------------
回音(
超时-1
正确答案为1的Rem示例
ClS
回声(1尤达)
埃科(2达斯维德)
回声(3)
回音(----------------------------------
Choice/C 123/M“星球大战中那个绿色小家伙是谁?”
如果错误级别2(呼叫:错误&转到:EOF),如果错误级别1(
呼叫:正确)否则转到:EOF
正确答案为2的Rem示例
ClS
回声(1只驯鹿)
回声(2只独角兽)
Echo(3只瓦莱黑颈羊)
回音(----------------------------------
Choice/C 123/M“什么是苏格兰的国家动物”
如果错误级别3(呼叫:不正确和转到:EOF),如果错误级别2(
呼叫:正确)如果错误级别1(呼叫:不正确&转到:EOF
)其他后藤:EOF
Rem示例,正确答案为3
ClS
回声(1只饥饿的北极熊)
回声(2)饥饿的白鲨
Echo(3名)与信用卡合作伙伴
回音(----------------------------------
Choice/C 123/M“哪个最危险”
如果错误级别3(呼叫:正确),否则如果错误级别1(
呼叫:错误(&GoTo:EOF)否则转到:EOF
Rem使用上述格式将其余问题放在此处
请不要更改下面的任何内容
ClS
Echo(你做到了最后
回音(
回声(按任意键退出。。。
超时-1>Nul
退出/B
:正确
Echo(你说得对!!
超时2 1>Nul
ClS
后藤:EOF
:不正确
Echo(对不起,你弄错了!!
超时2 1>Nul
ClS
后藤:EOF

set/p
更改为
Choice
,并更改结构,使您不需要对包含相同/类似输出文本的标签执行多个
goto
,可能会更好地为您服务

@Echo关闭
颜色02
标题:Paleshray的琐事小测验
回音(
回声(---------------
回音(
Echo(欢迎来到Paleshray的琐事小测验
回音(
回声(---------------
回音(
超时-1
正确答案为1的Rem示例
ClS
回声(1尤达)
埃科(2达斯维德)
回声(3)
回音(----------------------------------
Choice/C 123/M“星球大战中那个绿色小家伙是谁?”
如果错误级别2(呼叫:错误&转到:EOF),如果错误级别1(
呼叫:正确)否则转到:EOF
正确答案为2的Rem示例
ClS
回声(1只驯鹿)
回声(2只独角兽)
Echo(3只瓦莱黑颈羊)
回音(----------------------------------
Choice/C 123/M“什么是苏格兰的国家动物”
如果错误级别3(呼叫:不正确和转到:EOF),如果错误级别2(
呼叫:正确)如果错误级别1(呼叫:不正确&转到:EOF
)其他后藤:EOF
Rem示例,正确答案为3
ClS
回声(1只饥饿的北极熊)
回声(2)饥饿的白鲨
Echo(3名)与信用卡合作伙伴
回音(----------------------------------
Choice/C 123/M“哪个最危险”
如果错误级别3(呼叫:正确),否则如果错误级别1(
呼叫:错误(&GoTo:EOF)否则转到:EOF
Rem使用上述格式将其余问题放在此处
请不要更改下面的任何内容
ClS
Echo(你做到了最后
回音(
回声(按任意键退出。。。
超时-1>Nul
退出/B
:正确
Echo(你说得对!!
超时2 1>Nul
ClS
后藤:EOF
:不正确
Echo(对不起,你弄错了!!
超时2 1>Nul
ClS
后藤:EOF

对不起,我的第一种语言是JavaScript,多余的空格不是问题。谢谢!对不起,我的第一种语言是JavaScript,多余的空格不是问题。谢谢!EOF是什么意思?它可以在整个代码中调用相同的错误,而不必重新打印它们再次解释一下?
GoTo:EOF
。我已经设计了代码结构,使得
:error
:Correct
标签只编码一次,但会根据需要调用。谢谢。我会尝试一下。我已经更新了脚本,涵盖了所选选项1-3的
if
/
else
结构,希望如此t有帮助。EOF是什么意思?有没有可能让它在整个代码中调用相同的错误,而不必一次又一次地重新打印它们?
GoTo:EOF
已经解释过了。我已经设计了代码结构,使得
:error
:Correct
标签只编码一次,但称为是必需的。谢谢。我会尝试一下。我已经更新了脚本以涵盖的
if
/
else
结构