批量if语句似乎不起作用

时间:2017-04-13 09:08:24

标签: batch-file

我很困惑,感谢所有的帮助...... 所以我正在做一个小游戏,这就是代码:

@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)

被忽略了。

2 个答案:

答案 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(也用引号括起整个文件名以允许名称包含空格(并且无论是否遵循良好做法)你实际上需要以满足文件名中的空格))