批量 - 设置/“缺少操作员”

时间:2017-07-21 10:46:07

标签: batch-file

为什么我在游戏中这样做呢?

set /a Monster=%random% * 2 / 32768 + 1

但是这个没有 (注意:MHP = 10,DamageDealt = 5)

set /a MHP=%MHP% - %DamageDealt%

当我运行第二个时,它会说“Missing Operator”。 但是如果我两次运行它,它只会说一次......

这是一个更大的狙击手:

:FightExplora
if %HP%=<0 goto GAMEOVERExplora
if %MHP%=<0 goto FightEndExplora
cls
echo HP: %HP%/%MaxHP%     Str: %Strength%     XP:%XP%/%LVUP%     LV: %LV%     
$%Money%
echo.
echo You encountered a %Monster%!
echo Monster -- HP: %MHP%/%MaxMHP%     Str: %MonsterSTR%
echo.
echo [1-Attack] [2-Heal]
set /p Action="What will you do? > "
echo.
if %Action%==1 (
set /a DamageDealt=%random% * %Strength% / 32768 + 1
set /a MHP=%MHP% - %DamageDealt%
echo You did %DamageDealt% to the %Monster%
goto EnemyTurnExplora
)
if %Action%==2 (
set /a HealAMT=%random% * %MaxHP% / 32768 + (%MaxHP% / %Strength%)
set HP=%HealAMT%
if %HP% => %MaxHP% set %HP%=%MaxHP%
echo You healed %HealAMT% HP
goto EnemyTurnExplora
)
:EnemyTurnExplora
echo.
pause >nul
::Enemy Damage
echo.
set /a DamageTaken=%random% * %MonsterSTR% / 32768 + 1
set /a HP=%HP% - %DamageTaken%
echo The %Monster% dealt %DamageTaken% to you.
echo.
pause >nul
goto FightExplora

另外,当你说要治愈时,命令窗口会关闭,我不知道为什么......

1 个答案:

答案 0 :(得分:0)

不要使用%Variable%语法在算术表达式中扩展环境变量,因为在同一命令块中定义或修改引用的环境变量时,这在命令块中不起作用。在算术表达式中也不需要使用参考语法!Variable!进行延迟扩展。

在命令提示符窗口set /?中运行并仔细阅读输出帮助,解释算术表达式以及延迟扩展。正如您可以阅读研究帮助一样,您可以使用:

set /A MHP-=DamageDealt
  

表达式中的任何非数字字符串都被视为环境变量名称,在使用它们之前将其值转换为数字。如果指定了环境变量名称但未在当前环境中定义,则使用值零。这允许您使用环境变量值进行算术运算,而无需键入所有这些%符号来获取它们的值。

使用错误的原因:

 set /a MHP=%MHP% - %DamageDealt%

在扩展环境变量时未定义环境变量MHPDamageDealt或两者,结果是执行这3个命令行之一:

 set /a MHP= - 50
 set /a MHP= 200 -
 set /a MHP= -

使用时不会发生这种情况:

set /A MHP=MHP - DamageDealt
set /A MHP-=DamageDealt

如果在评估表达式时根本不存在引用的环境变量,则等号右侧的每个环境变量名称将替换为0。