当前位置: 首页 > 知识库问答 >
问题:

此时转到批处理文件是意外的

姜烨伟
2023-03-14

请使用下面的脚本作为参考。嗯,我正在尝试进入编程领域,我正在创建我的批处理rpg,看看我是否可以做到......无论如何,有点碰壁:我一直收到“goto此时出乎意料”的错误。错误如下:最初,在标签游戏(: game)之后,输入系统正常工作,但不正确(即您输入输入4并获得8的操作,输入8却什么也没有获得,等等)。我改变了一些东西,但我不确定我改变了什么......导致在到达标签游戏时出现“错误:goto此时出乎意料”。我意识到我在错误的地方添加了括号,所以我再次更改了它(在%位置%==1之后),所以我更正了它-现在,在接受输入“项目”(设置 /p项目="

剧本如下:

@echo off
title=Role Playing Game
cls
echo/
echo   #####     #####     ####     
echo   #    #    #    #   #
echo   #####     #####    #  ###
echo   #    #    #        #    #
echo   #     #   #         ####
echo/
echo/
pause
:menu
cls
echo MENU
echo Options:
echo Start New Game-------------1
echo Continue Previous Game-----2
echo About----------------------3
echo Quit-----------------------4
set /p a="> "
if %a%==1 goto new
if %a%==2 goto continue
if %a%==3 goto about
if %a%==4 exit
:new
cls
echo What is your name?
set /p name="> "
echo/
echo What is your race?
echo Human-----1
echo Dwarf-----2
echo Elf-------3
set /p race="> "
if %race%==1 (
set /a location=1
set /a agility=3
set /a strength=3
set /a magic=2
set /a stamina=0
)
if %race%==2 (
set /a location=2
set /a agility=0
set /a strength=6
set /a stamina=0
set /a magic=0
)
if %race%==3 (
set /a location=3
set /a strength=0
set /a agility=6
set /a magic=0
set /a stamina=0
)
echo/
echo What is your class?
echo Warrior------1
echo Assassin-----2
echo Wizard-------3
set /p class="> "
if %class%==1 (
set /a strength=%strength%+10
set /a stamina=10
set /a agility=%agility%+7
set /a magic=%magic%+0
)
if %class%==2 (
set /a strength=%strength%+7
set /a stamina=7
set /a agility=%agility%+10
set /a magic=%magic%+0
)
if %class%==3 (
set /a strength=%strength%+4
set /a stamina=5
set /a agility=%agility%+5
set /a magic=%magic%+10
)
echo/
echo What are your assets?
echo Monetary Wealth----------1
echo Arms and Armor-----------2
echo Potions and Trinkets-----3
set /p items="> "
set /a gold=100
set /a sword=1
set /a armor=1
set /a healthp=1
set /a focusp=0
set /a ragep=0
set /a trinket=0
if %items%==1 (
set /a gold=300
)
if %items%==2 (
set /a sword=3
set /a armor=3
)
if %items%==3 (
set /a healthp=5
set /a focusp=5
set /a ragep=5
set /a trinket=1
)
echo/
pause
cls
if %race%==1 (
if %class%==1 (
if %items%==1 (
echo For all of your life, you have been raised among humans on the WesterHam
echo plains. An aristocrat by birth, you longed for the thrill of combat and
echo apprenticed your-self to the service of an officer in the military, where you
echo became an excellent warrior. Now of age, you have decided to take your
echo inheritance and explore the world. Good luck, %name%.
)
if %items%==2 (
echo You come from a long line of noble warriors, descending of a race of pure
echo humans out of the WesterHam plains. While you were not always able to put
echo bread on the table, your family has an abundance of arms and armor. Now fully
echo grown, you set out, well equiped with family heirlooms in order to make a
echo better life for yourself. Good luck, %name%.
)
if %items%==3 (
echo Your family of humans comes out of the WesterHam plains, and has never
echo ventured out of this area. As a child, you were fascinated with the art of
echo magic, but were never able to grasp spellcasting and the like, and instead
echo took training as a warrior. But the fascination never died, and every bit of
echo money you earned as a child was spent buying potions and enchanted items. Now
echo grown, you have saved a small sum of money, in addition to several potions
echo you collected as a child. You set out to explore the world in search of a
echo magic art simple enough for you to grasp. Good luck, %name%.
)
)
if %class%==2 (
if %items%==1 (
echo In your early childhood, you were raised with the honor of your wealthy
echo human family of WesterHam. As you met adolescence, you rebeled and cast your 
echo lot with the assassins, allowing them to teach you their ways. Now of legal
echo age, you demand your inheritance so that you may set off and prove your loyalty
echo to the assassins guild. Good luck, %name%.
)
if %items%==2 (
echo As a child, you grew up in the human-populated plains of WesterHam. You were
echo orphaned at a young age, but the assassins guild took you in and taught you
echo their ways. From them, you have recieved a set of arms with which to do the
echo work of an assassin. Now completely trained, you begin to search the world,
echo offering your services to those that pay. Good luck, %name%.
)
if %items%==3 (
echo As a child, your upbringing was among humans in the plains of WesterHam. You
echo had a natural skill in alchemy, and began to produce potions of sorts, which
echo you would sell on the black market in hopes of bringing some income for your
echo poor family. In this style of trade, you were introduced to assassins from
echo time to time. In order to help sustain your family, you joined the assassins
echo guild in hopes of increasing income. Now armed with a collection of potions,
echo you set off to make a new life. Good luck, %name%.
)
)
if %class%==3 (
if %items%==1 (
echo As a child, you were brought up as a wealthy human inhabitant of the WesterHam
echo plains. You proved to be very intelligent as a child, so your parents sent you
echo off to school to learn the magic arts. You learned quickly, and advanced much
echo faster than any of the other students. You are now of age, and have taken your
echo inheritance to set off and see how you may use your skills. Good luck,
echo %name%.
)
if %items%==2 (
echo Ever since you were young, you displayed a strong curiosity and sense of
echo intelligence. However, you came from a family of warriors, proud humans of the
echo WesterHam plains. Weapons you had, but the money to learn magic you had not.
echo instead, you were "self taught" in the arts of magic, aquiring what you know
echo by close, constant observation of those that had mastered the art. Now of age,
echo you have inherited your set of arms, and been sent off to make your own way in
echo the world. Good luck, %name%.
)
if %items%==3 (
echo Since your days of young, you have been entirely enthrolled with wizardry.
echo Having been raised as an honorable human wizard on the plains of WesterHam, you
echo learned to produce potions that would complement your magical talents. Now that
echo you are of age, you set off into the world, determined to rely on use of your
echo magic talents and the aid of potions. Good luck, %name%.
)
)
)
if %race%==2 (
if %class%==1 (
if %items%==1 (
echo For all of your life, you have been raised among dwarves in the Morrowvale
echo mines. Wealthy by birth, you longed for the honors of battle and enlisted in
echo defensive forces of Morrowvale, where you soon proved your talents. Now of age,
echo you have taken your inheritance to explore the world beyond Marrowvale. Good
echo luck, %name%.
)
if %items%==2 (
echo You come from a long line of noble warriors, descending of a race of dwarvish
echo folk out of the Morrowvale mines. While you were not always able to put bread 
echo on the table, your family has an abundance of arms and armor. Now fully grown,
echo you set out, well equiped with family heirlooms in order to make a better life
echo for yourself. Good luck, %name%.
)
if %items%==3 (
echo Your family of dwarves comes out of the Morrowvale mines, and has never
echo ventured out of this area. As a child, you were fascinated with the art of
echo magic, but were never able to grasp spellcasting and the like, and instead
echo took training as a warrior. But the fascination never died, and every bit of
echo money you earned as a child was spent buying potions and enchanted items. Now
echo grown, you have saved a small sum of money, in addition to several potions
echo you collected as a child. You set out to explore the world in search of a
echo magic art simple enough for you to grasp. Good luck, %name%.
)
)
if %class%==2 (
if %items%==1 (
echo In your early childhood, you were raised with the honor of your wealthy
echo family of dwarves in Morrowvale. As you met adolescence, youre good natured 
echo sense of adventure led you mistakenly to the assassins guild, where you learned
echo their ways. Now of age, you recieve your inheritance so that you may set off to
echo explore the world. Good luck, %name%.
)
if %items%==2 (
echo As a child, you grew up in the dwarf-populated mines of Morrowvale. You were
echo orphaned at a young age, but the assassins guild took you in and taught you
echo their ways. From them, you have recieved a set of arms with which to do the
echo work of your training. Now completely trained, you begin to search the world,
echo offering your services in the name of justice. Good luck, %name%.
)
if %items%==3 (
echo As a child, your upbringing was among dwarves in the mines of Morrowvale. You
echo "tinkered" some in alchemy, and began to produce potions of sorts, which you
echo would sell on the black market in hopes of bringing some income for your poor
echo family. In this style of trade, you were introduced to assassins from time to
echo time. In curiosity you joined the assassins guild. Now armed with a collection
echo of potions, you set off to explore the world. Good luck, %name%.
)
)
if %class%==3 (
if %items%==1 (
echo As a child, you were brought up as a well off dwarf of the Morrowvale mines.
echo You proved to be very intelligent as a child, so your parents sent you off to
echo school to learn the magic arts. You learned quickly, and advanced much faster
echo faster than any of the other dwarves. You are now of age, and have taken your
echo inheritance to set off and see how you may use your skills. Good luck,
echo %name%.
)
if %items%==2 (
echo Ever since you were young, you displayed a strong curiosity and sense of
echo intelligence. However, you came from a family of warriors, proud dwarves of
echo the Morrowvale mines. Arms you had, but the money to learn magic you had not.
echo instead, you were "self taught" in the arts of magic, aquiring what you know
echo by close, constant observation of elders who had mastered the art. Now of age,
echo you have inherited your set of arms, and been sent off to make your own way in
echo the world. Good luck, %name%.
)
if %items%==3 (
echo Since your days of young, you have been consumed with wizardry. Having been
echo raised as a witty dwarfish wizard on the mines of Morrowvale, you learned to
echo produce potions that would complement your magical talents. Now that you are of
echo age, you set off into the world, determined to rely on use of your magic talent
echo and the aid of potions. Good luck, %name%.
)
)
)
if %race%==3 (
if %class%==1 (
if %items%==1 (
echo For all of your life, you have been raised among elves in the Dalewood forests.
echo An aristocrat by birth, you wished to serve your people in the armed forces,
echo and quickly proved yourself among peers and superiors. Now of age, you have
echo a generous inheritance and skills in combat. You set off in conquest for the 
echo elvish people. Good luck, %name%.
)
if %items%==2 (
echo You come from a long line of noble warriors, descending of a race of pure
echo elves out of the Dalewood forests. While you were not always able to put bread
echo on the table, your family has an abundance of arms and armor. Now fully grown,
echo you set out, well equiped with family heirlooms in order to make a better life
echo for yourself. Good luck, %name%.
)
if %items%==3 (
echo Your family of elves comes out of the Dalewood forests, and has never ventured
echo out of this area. As a child, you were fascinated with the art of magic, but
echo were never able to grasp spellcasting and the like, and instead took training
echo as a warrior. But the fascination never died, and every bit of coin you earned
echo as a child was spent buying potions and enchanted items. Now grown, you have
echo saved a small sum of money, in addition to several potions you collected as a
echo child. You set out to explore the world in search of a magic art simple enough
echo for you to grasp. Good luck, %name%.
)
)
if %class%==2 (
if %items%==1 (
echo In your early childhood, you were raised with the honor of your wealthy elvish
echo family of Dalewood. As you met adolescence, you chose the honorable path of a 
echo royal assassin, being taught the ways of a fearless shadow on the battlefield.
echo As you are now of age, you aquire your inheritance so that you may set off and
echo prove your loyalty to elf-kind. Good luck, %name%.
)
if %items%==2 (
echo As a child, you grew up in the elf-populated forests of Dalewood. You were
echo chose your destiny at a young age, to be an elite assassin for the elvish army.
echo From them, you have recieved a set of arms with which to do the work of an
echo assassin. Now completely trained, you begin to search the world, using your
echo assets in the name of elf-kind. Good luck, %name%.
)
if %items%==3 (
echo As a child, your upbringing was among elves in the forests of Dalewood. You
echo had a natural skill in alchemy, producing fine elvish potions, which you would
echo sell for the commision of the elite elvish assassins. This introduction to the
echo assassins life intrigued you, and soon you began your training as an assassin.
echo Now having completed your training, you head off armed with a collection of
echo potions, to make a new life. Good luck, %name%.
)
)
if %class%==3 (
if %items%==1 (
echo As a child, you were brought up as a wealthy elvish inhabitant of the Dalewood
echo forests. You proved to be very intelligent as a child, so your parents sent you
echo off to the academy to learn the magic arts. You learned quickly, and advanced
echo faster than any of the other students. You are now of age, and have taken your
echo inheritance to set off and see how you may use your skills. Good luck,
echo %name%.
)
if %items%==2 (
echo Ever since you were young, you displayed a strong curiosity and sense of
echo intelligence. However, you came from a family of warriors, proud elves of the
echo Dalewood forests. Weapons you had, but the money to learn magic you had not.
echo instead, you were "self taught" in the arts of magic, aquiring what you know
echo by close, constant observation of those that had mastered the art. Now of age,
echo you have inherited your set of arms, and been sent off to make your own way in
echo the world. Good luck, %name%.
)
if %items%==3 (
echo Since your days of young, you have been entirely enthrolled with wizardry.
echo Having been raised as an honorable elvish wizard in the forests of Dalewood,
echo you learned to produce potions that would complement your magical talents. Now
echo that you are of age, you set off into the world, determined to rely on use of
echo your magic talents and the aid of potions. Good luck, %name%.
)
)
)
echo/
:game
cls
if %location%==1 (
echo Plains of WesterHam
echo/
echo You walk down the fading dirt road into the prarie town of WesterHam. The wind
echo blows the long, thin grass about in a ripple-type of pattern. As you enter the
echo town, you look about and note the busy market, characteristic of towns
echo inhabited by humans. You see a quaint looking inn directly to your left, and a
echo ways down the road you spot a bakery. On the right side or the street is a
echo blacksmith shop, as well as an apothecaries shop that advertises instruction in
echo magic as well. At the very end of the lane, you percieve a church of moderate
echo size.
echo/
echo/
echo What do you want to do?
echo Enter the inn---------------------1
echo Enter the bakery------------------2
echo Enter the blacksmith shop---------3
echo Enter the apothecaries------------4
echo Enter the church------------------5
echo Enter the market-place------------6
echo Loot some homes-------------------7
echo Turn around; travel elsewhere-----8
set /p towna="> "
if %towna%==1 goto inn
if %towna%==2 (
cls
echo Seems to be closed today. Maybe the owner is at the market-place.
pause
goto town1i
)
if %towna%==3 goto smith
if %towna%==4 goto apoth
if %towna%==5 goto church
if %towna%==6 (
cls
echo You don't have time for such things. Maybe in the Beta version you will.
pause
goto town1i
)
if %towna%==7 (
cls
echo No, youre too good for that. Maybe in the Beta version you won't be.
goto town1i
)
if %towna%==8 goto travel
)
if %location%==2 (
echo Mines of Morrowvale
)
if %location%==3 (
echo Forests of Dalewood
)

就我所见,我的代码应该可以工作,我不知道是什么导致了错误消息。作为旁注,是什么导致了错误消息“goto is unexpected”?有没有未定义的目标?是否可以通过添加目标标签来解决这个问题(不太可能,因为这样会显示标签未定义的消息)。未来如何避免这种情况?

共有2个答案

胡鸿羲
2023-03-14

主要的问题是,您还没有告诉我们您在提示中输入了什么,所以跟踪未知输入的情况意味着您必须为我们的水晶球提供新电池。

一般来说,在处理输入时,你应该注意两个特点。首先,只需按Enter键,目标变量将保持不变。你可以通过使用

set var=defaultvalue
set /p var="> "

这将使var仅在Enter上设置为默认值

set "var="
set /p var="> "
if not defined var echo no input?

如果你不想要默认值。

第二个问题是批处理在执行之前用该变量的当前值替换%var%。因此,如果%var%==something whatever将变成if==something whatever如果var未设置(或被“设置”为空字符串),如果带有空格的某物==something whatever被设置为“带有空格的某物”,则会尝试执行CMD出于历史原因,需要使用语法IF string操作符string dosomething with parameters,因此如果“%var%”==“string” 一般用于分析用户输入。

语法!var var的值在块内发生变化,并且您希望访问新值,则需要在“块语句”(即括号内的语句序列)中使用code>%var%将为您提供**OLD**值(即,在执行开始之前,在调用块的语句第一次遇到时,变量的原始值)使用!var ,您需要处于delayedexpansion模式,也就是说,您需要执行一条setlocal enabledelayedexpansion语句。

此外,还有一小部分没有改变

set /p towna="> "
if %towna%==1 goto inn
if %towna%==2 (
cls
echo Seems to be closed today. Maybe the owner is at the market-place.
pause
goto town1i
)
if %towna%==3 goto smith
if %towna%==4 goto apoth
if %towna%==5 goto church
if %towna%==6 (
cls
echo You don't have time for such things. Maybe in the Beta version you will.
pause
goto town1i
)
if %towna%==7 (
cls
echo No, youre too good for that. Maybe in the Beta version you won't be.
goto town1i
)
if %towna%==8 goto travel
)        <<<<<<<<THIS STRAY ) can cause havoc!

附录以演示%var%之间的区别!var!在块内外以及有/没有enabledelayed扩展

@ECHO OFF
SETLOCAL
set var=before
if "%var%"=="before" (
 set var=after
 echo in-block results: %var% and !var!
)
echo after block results: %var% and !var!
ENDLOCAL
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO DELAYEDEXPANSION invoked
set var=before
if "%var%"=="before" (
 set var=after
 echo in-block results: %var% and !var!
)
echo after block results: %var% and !var!
ENDLOCAL
GOTO :EOF

鲁单弓
2023-03-14

你的问题是批量扩张太早。

当程序到达行if%location%==1时,下面的整个if块将展开,包括嵌套的if towna=*行。

要修复,您必须执行以下操作:

>

  • 您必须在代码的开头调用SETLOCAL ENABLEDELAYEDEXPANSION。此命令启用动态变量的延迟扩展。

    然后必须使用if!汤娜==* ,则使用code>而不是。这种变量不会在到达其块时立即展开。相反,如果调用了SETLOCAL ENABLEDELAYEDEXPANSION,解释器将在实际到达时对其进行扩展。

    请注意,无论何时在任何语句块内设置和调用变量,都必须完成这些步骤。

  •  类似资料:
    • 错误:此时安装意外。 当我在CMD上运行此脚本时,安装应用程序后,突出显示的(粗体)echo语句中会出现错误。我尝试过删除@ECHO OFF,但似乎不起作用。请建议。 下面是代码:

    • 当我运行这个脚本时,我收到 |这在当时是出人意料的。 这是代码: 在句子中,

    • 我的Windows批处理文件中出现了“此时转到意外”错误。就像下面一样。我不知道。有人能帮我吗?谢谢

    • 我的批处理文件(Windows 7 x64)有问题。我成功地将其简化为以下内容(有两行空评论;是否有实际评论似乎无关紧要): 将其放入批处理文件中,然后在没有参数的情况下运行它,会产生以下输出: 删除行之一,或删除周围的,可以修复问题,以便获得预期的输出: 这是怎么回事?它为什么要找驱动器? 编辑 感谢您对far的回复。所以我的问题可以归结为: 确定是指“注释开始”还是“驱动器号冒号”的规则是什么

    • 主要内容:创建批处理文件,保存批处理文件,执行批处理文件,修改批处理文件在本章中,我们将学习如何创建,保存,执行和修改批处理文件。 创建批处理文件 批处理文件通常在记事本中创建。 因此,最简单的方法是打开记事本并输入脚本所需的命令。 对于这个练习,打开记事本并输入以下语句。 保存批处理文件 在创建批处理文件后,下一步是保存批处理文件。 批处理文件的扩展名为或。 命名批处理文件时需要注意的一些常规规则 - 在命名批处理文件时避免使用空格,有时会在从其他脚本中调用时产生问

    • 我的问题陈述。读取包含1000万数据的csv文件,并将其存储在数据库中。用尽可能少的时间 我使用java的简单多线程执行器实现了它,其逻辑几乎与spring batch的chunk相似。从csv文件中读取预配置数量的数据,然后创建一个线程,并将数据传递给线程,该线程验证数据,然后写入多线程运行的文件。完成所有任务后,我将调用sql loader来加载每个文件。现在我想把这段代码移到spring b