Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 比较批处理文件中的两个数字_Math_Batch File_Cmd_Compare - Fatal编程技术网

Math 比较批处理文件中的两个数字

Math 比较批处理文件中的两个数字,math,batch-file,cmd,compare,Math,Batch File,Cmd,Compare,我在这个网站上搜索了我的问题,但没有找到解决问题的方法 系统为玩家和计算机提供一个随机数,从2到12 这有三个部分,如果X大于Y,如果X小于Y,当X和Y相同时 当我启动.bat时,它工作得很好,我选择玩游戏,我输入赌注(例如20),但当我启动此过程时,窗口关闭,我无法读取它写的内容。我可以看到一些闪烁的文字,我看到了“你的”和“语法”,但它消失得很快 我真的很确定它是有效的,因为当我删除3if东西时,它显示了我的钱、赌注、统计数据和一切,我甚至可以用我写的“作弊”来减少或增加它 这就是: set

我在这个网站上搜索了我的问题,但没有找到解决问题的方法

系统为玩家和计算机提供一个随机数,从2到12

这有三个部分,如果X大于Y,如果X小于Y,当X和Y相同时

当我启动
.bat
时,它工作得很好,我选择
玩游戏
,我输入赌注(例如20),但当我启动此过程时,窗口关闭,我无法读取它写的内容。我可以看到一些闪烁的文字,我看到了“你的”和“语法”,但它消失得很快

我真的很确定它是有效的,因为当我删除3
if
东西时,它显示了我的钱、赌注、统计数据和一切,我甚至可以用我写的“作弊”来减少或增加它

这就是:

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的答案帮助很大。谢谢你,恩多!谢谢,朱利安的回答帮了大忙。谢谢你,恩多!