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

时间:2013-08-25 14:22:47

标签: math batch-file cmd compare

我搜索了这个网站以寻找我的问题,但我找不到解决问题的方法。

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

如果X大于Y,如果X小于Y,并且X与Y相同,则有3个部分。

当我启动.bat时,它运行良好,我选择Play Game,我输入投注(例如20),但是当我开始此过程时,窗口关闭,我可以'读它写的东西。我可以看到一些闪烁的文字,我看到了'你的'和'语法',但它消失得很快。

我确信它有效,因为当我删除3 if if 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

谢谢!

2 个答案:

答案 0 :(得分:3)

1)您忘记关闭最后一个括号

2)语法错误在这里:

if %enemynum% EQU %playernum%
(

应该是:if %enemynum% EQU %playernum% (

3)显示money变量的值时会出错。

这是由两个事实造成的: - >在FOR或IF中,变量在命令执行之前“扩展”,而不是在命令执行期间。 (expanded =变量由其值重新计算)

为了更改变量的值并在同一循环中使用它,您应该使用延迟表达式。

您必须在代码的开头编写SETLOCAL ENABLEDELAYEDEXPANSION,并且应该延迟扩展的变量应该用感叹号代替百分号。

因此echo Your current money is %money%.成为echo Your current money is !money!.

4)如果是平局,你必须逃避括号: echo You won the bet ^(%bet%^) but your money didn't changed.

5)您没有放置标签INTRO,因此goto INTRO将失败

答案 1 :(得分:0)

你应该搜索delayed expansionsetlocal enabledelayedexpansion)并计算你的括号:每个开括号需要一个结束(我知道有例外,但不是这里)。 if之后的左括号必须与if位于同一行。 if解析器将在此处停止:%bet%),因为这是最后一次打开后的第一个结束括号。