Вы также можете использовать подпрограммы и / или макросы, если хотите немного повеселиться с кодированием
Подход, основанный на подпрограммах
Преимущество: легче выполнять дальнейшие изменения в блоках кода / для циклов
Недостаток: медленнее
@echo off & Goto :Main
:math
Setlocal EnableDelayedExpansion
Set "Var=!%~1!"
Set /A "Var%2=%~3"
(
Endlocal
Set %1=%Var%
Exit /B
)
:Main
Set "@M=Call :math"
Set Hp=40
Set heal=30
%@M% Hp - 20
Echo(%Hp%
%@M% Hp + heal
Echo(%Hp%
%@M% Hp / 3
Echo(%Hp%
%@M% Hp * 4
Echo(%Hp%
pause >nul
Макро-подход
Преимущество: более эффективно, чем вызовы подпрограмм.
Недостаток: менее интуитивно понятный, чтобы иметь возможность строить (хотя стоит освоить), процесс доступа и дальнейшей модификации переменной в кодовых блоках слишком сложен.
@Echo Off
setlocal DisableDelayedExpansion
(set LF=^
%= Newline =%)
Set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
(Set "Operate=Endlocal ^& Set /A ""%%G%%H=%%I"""
%= 'Tunnels' variable value, Allows Definition of Arithmetic within Macro =%)
Set @M=for /L %%n in (1 1 2) do if %%n==2 (%\n%
for /F "tokens=1,2,3 delims=, " %%G in ("!argv!") do (%\n%
%Operate%%\n%
%= Display value of variable. Not recommended, as Call reduces efficiency gain =%
Call Echo(%%G: %%%%G%%%\n%
) %\n%
) ELSE setlocal enableDelayedExpansion ^& set argv=,
%= Facilitate modification of variables within codeblocks. =%
Setlocal EnableDelayedExpansion
REM macro can be used to define as well as modify variables
REM output of macro can be redirected to nul (hidden) like so:
REM (%@M% hp + 50)>nul
%@M% hp + 50
(%@M% heal + 30)>nul
%@M% hp - 30
%@M% hp + 25
%@M% hp * 3
%@M% hp / 2
%@M% hp + heal
%@M% heal - 10
%@M% hp + heal
%= Demomonstates use of equation beyond the initial Operator. Spaces cannot be used. =%
%= Increments variable by a random amount in the range of 10 to 20 =%
For /L %%A in (1,1,50) do (%@M% hp + !random!%%10+10)>nul
Echo(hp: %hp%
For /L %%A in (1,1,50) do (%@M% hp - !random!%%10+10)
pause