我很困惑,感谢所有的帮助...... 所以我正在做一个小游戏,这就是代码:
@echo off
:menu
echo Welcome To My Game!!!
echo Play & echo.Exit
:: add more menu items above
set /p menInp=
if /i %menInp%==play goto initFile
if /i %menInp$==exit EXIT
:initFile
cls
if NOT exist \MyAdventureGame\AdventureGameSave.txt\ GOTO newGame
if exist \MyAdventureGame\AdventureGameSave.txt\ GOTO Load
:newGame
echo. 2>AdventureGameSave.txt
set Gold = 50
set Xp = 0
set Level = 1
GOTO Save
:Save
echo %Gold% >>AdventureGameSave.txt
echo %Xp% >>AdventureGameSave.txt
echo %Level% >>AdventureGameSave.txt
GOTO Town
:Load
:: add Load functionallity here
GOTO Town
:Town
echo Welcome to town!!!
PAUSE
现在我的问题...... 当我运行它时,无论我为menInp键入什么,我的程序都会转到下一行:initFile,它几乎就像我的if语句
(if /i %menInp%==play goto initFile
if /i %menInp$==exit EXIT)
被忽略了。
答案 0 :(得分:0)
if /i %menInp$==exit EXIT
应该是
if / i%menInp%==退出退出
或者最好
if / i"%menInp%" =="退出" EXIT
因为您无法预测用户的输入,并且它可能包含空格。 "
使字符串成为单个标记。
答案 1 :(得分:0)
这有点评论,但可能会阻止进一步的问题。
游戏生成提示:
如果您保留一个字符作为变量的前缀 - 您想要保存(例如,我想要保存/重新加载的所有变量都以#
开头),那么您只需要保存一场比赛
set #>"mygamefile.txt"
你需要重新加载游戏
for /f "usebackqdelims=" %%a in ("mygamefile.txt") do set "%%a"
要删除所有#
变量(在重新加载游戏之前有用),请使用
for /f "delims==" %%a in ('set # 2^>nul') do set "%%a="
哦,您可以考虑从\
语句中的文件名中删除终端if exist
(也用引号括起整个文件名以允许名称包含空格(并且无论是否遵循良好做法)你实际上需要以满足文件名中的空格))