как сделать математические действия в bat среди переменных

как сделать математические действия в bat среди переменных. как вычесть переменную goblin_hp от hero_damage

set /a goblin_hp=4
set /a hero_damage=3
set /p answer=выбирай
if %answer%==1 %goblin_hp% - %hero_damage%
echo ты ударил гоблина и у него осталось %goblin_hp%
pause

Ответы (2 шт):

Автор решения: Алексей Р

В самом простом варианте вам нужно лишь присвоить вычисленное значение переменной:

if %answer%==1 set /a goblin_hp = %goblin_hp% - %hero_damage%

Но остальная часть кода (сообщение об остатке goblin_hp) будет выполняться независимо от того, ударили гоблина или нет. Можно сделать так:

@echo off
setlocal EnableDelayedExpansion
set /a goblin_hp=4
set /a hero_damage=3
set /p answer=Выбирай: 
if %answer%==1 (
    set /a goblin_hp = %goblin_hp% - %hero_damage%
    echo Ты ударил гоблина и у него осталось !goblin_hp!
)
pause

Пояснения относительно setlocal EnableDelayedExpansion и !goblin_hp! - здесь.

Можно попроще, c goto:

@echo off
set /a goblin_hp=4
set /a hero_damage=3
set /p answer=Выбирай: 
if %answer% NEQ 1 goto out
set /a goblin_hp = %goblin_hp% - %hero_damage%
echo Ты ударил гоблина и у него осталось %goblin_hp%
:out
pause
→ Ссылка
Автор решения: Urik

Проблема может быть в одеревеневшем трансляторе батников, его не правили лет 10 точно. Может поможет убирание пробелов:

set /a goblin_hp = %goblin_hp%-%hero_damage%
→ Ссылка