Math 比较批处理文件中的两个数字
我在这个网站上搜索了我的问题,但没有找到解决问题的方法 系统为玩家和计算机提供一个随机数,从2到12 这有三个部分,如果X大于Y,如果X小于Y,当X和Y相同时 当我启动Math 比较批处理文件中的两个数字,math,batch-file,cmd,compare,Math,Batch File,Cmd,Compare,我在这个网站上搜索了我的问题,但没有找到解决问题的方法 系统为玩家和计算机提供一个随机数,从2到12 这有三个部分,如果X大于Y,如果X小于Y,当X和Y相同时 当我启动.bat时,它工作得很好,我选择玩游戏,我输入赌注(例如20),但当我启动此过程时,窗口关闭,我无法读取它写的内容。我可以看到一些闪烁的文字,我看到了“你的”和“语法”,但它消失得很快 我真的很确定它是有效的,因为当我删除3if东西时,它显示了我的钱、赌注、统计数据和一切,我甚至可以用我写的“作弊”来减少或增加它 这就是: set
.bat
时,它工作得很好,我选择玩游戏
,我输入赌注(例如20),但当我启动此过程时,窗口关闭,我无法读取它写的内容。我可以看到一些闪烁的文字,我看到了“你的”和“语法”,但它消失得很快
我真的很确定它是有效的,因为当我删除3if
东西时,它显示了我的钱、赌注、统计数据和一切,我甚至可以用我写的“作弊”来减少或增加它
这就是:
set /p setbet=Please type a number to select bet:
if "%setbet%"=="1" set bet=20
if "%setbet%"=="2" set bet=50
if "%setbet%"=="3" set bet=100
if "%setbet%"=="4" set bet=150
if "%setbet%"=="5" set bet=200
if "%setbet%"=="6" set bet=250
if "%setbet%"=="7" set bet=300
echo.
echo Your bet is %bet%.
echo.
pause
cls
set /a money-=bet
set /a playernum=%random% %%12 +2
set /a enemynum=%random% %%12 +2
echo.
echo You roll: %playernum%
echo Enemy rolls: %enemynum%
echo.
if %playernum% LSS %enemynum%
(
echo Enemy wins. Please try again.
echo Your current money is %money%.
echo You lost %bet% money.
echo.
pause
goto INTRO
)
if %enemynum% LSS %playernum%
(
set /a money+=bet*2
echo You win.
echo Your current money is %money%.
echo You won %bet% money.
echo.
pause
goto INTRO
)
if %enemynum% EQU %playernum%
(
set /a money+=bet
echo It's a tie.
echo You won the bet (%bet%), but your money didn't changed.
echo Your money is now %money%.
echo.
pause
goto INTRO
谢谢大家! 您应该搜索
延迟扩展
(setlocal enabledelayedexpansion
)并计算括号:每个开始的括号都需要一个结束的括号(我知道有一些例外,但这里没有)。if
后面的开口括号必须与if
位于同一行。if
解析器将停止在这里:%bet%)
因为这是上次打开后的第一个结束括号。您应该搜索延迟扩展(setlocal enabledelayedexpansion
)并计算括号:每个开始括号都需要一个结束括号(我知道有例外,但不在这里)。if
后面的开口括号必须与if
位于同一行。if
解析器将停止在这里:%bet%)
因为这是最后一个打开后的第一个结束括号。1)您忘记关闭最后一个括号了
2) 语法错误如下:
if %enemynum% EQU %playernum%
(
它应该是:if%enemynum%eq%playernum%(
3) 货币变量的值在显示时将是错误的
这是由两个事实造成的:
->在FOR或IF中,变量在命令执行之前“展开”,而不是在命令执行期间展开。(展开=变量由其值重新放置)
为了更改变量的值并在同一循环中使用它,应该使用延迟表达式
您必须在代码的开头编写SETLOCAL ENABLEDELAYEDEXPANSION,并且应该延迟扩展的变量应该用感叹号而不是百分号包围
所以回显您当前的钱是%money%。
变成回显您当前的钱是!钱代码>
4) 如果出现以下情况,则必须将括号转义:
echo您赢了赌注^(%bet%^),但您的钱没有变。
5) 您没有添加标签介绍,因此您的转到介绍
将失败1)您忘记关闭最后一个括号
2) 语法错误如下:
if %enemynum% EQU %playernum%
(
它应该是:if%enemynum%eq%playernum%(
3) 货币变量的值在显示时将是错误的
这是由两个事实造成的:
->在FOR或IF中,变量在命令执行之前“展开”,而不是在命令执行期间展开。(展开=变量由其值重新放置)
为了更改变量的值并在同一循环中使用它,应该使用延迟表达式
您必须在代码的开头编写SETLOCAL ENABLEDELAYEDEXPANSION,并且应该延迟扩展的变量应该用感叹号而不是百分号包围
所以回显您当前的钱是%money%。
变成回显您当前的钱是!钱代码>
4) 如果出现以下情况,则必须将括号转义:
echo您赢了赌注^(%bet%^),但您的钱没有变。
5) 您没有添加标签介绍,因此您的转到介绍
将失败谢谢,这是一个非常有用的答案,它解决了问题。(代码中有goto INTRO,但很抱歉,我忘了复制它)谢谢,这是一个非常有用的答案,它解决了问题。(goto INTRO在代码中,但很抱歉,我忘了复制)谢谢,这个+Julien的答案帮助很大。谢谢你,恩多!谢谢,朱利安的回答帮了大忙。谢谢你,恩多!