如何批量减去变量

Mou*_*hio 4 batch-file

我正在批量制作一个基于文本的游戏,我需要从武器/盔甲的成本中减去玩家的黄金......有人可以看看我的代码并告诉我他们是否发现了问题吗?

@echo off 
set gold= 20

echo %gold%
pause >nul
goto blacksmith
:blacksmith
set /p weaponch=  Purchase: 

if %weaponch%==1s (
set  weaponch= 10
set a/ gold=%gold%-10
echo.
echo Gold: %gold% You have purchased the Light Sword
pause 
)
Run Code Online (Sandbox Code Playgroud)

rp.*_*ran 5

您的代码中有两个问题。

第一个由 user328430s 的答案修复,您使用a/而不是/a,而且 -= 更容易。

另一个问题是,批处理一旦到达,就会立即填充 if 中的所有实例%gold%,因此直到之后它才能识别更改。我想这是为了优化,但它会导致问题。要修复它,您必须在程序中启用延迟扩展,然后在您必须提醒它对 gold 变量使用延迟扩展时。首先使用以下命令来完成此操作:

setlocal enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)

然后切换

echo Gold: %gold% You have purchased the Light Sword
Run Code Online (Sandbox Code Playgroud)

echo Gold: !gold! You have purchased the Light Sword
Run Code Online (Sandbox Code Playgroud)

将其与修正后的减法线相加,即可得到:

@echo off 
setlocal enabledelayedexpansion
set gold= 20

echo %gold%
pause >nul
goto blacksmith
:blacksmith
set /p weaponch=  Purchase 

if %weaponch%==1s ( 
set  weaponch= 10
set /a gold-=10
echo.
echo Gold: !gold! You have purchased the Light Sword
pause 
)
Run Code Online (Sandbox Code Playgroud)

我在我的电脑上测试了一下,输入1秒进行购买,一切正常。希望有帮助。