Я думаю, что это логика, к которой вы стремитесь.Ваше предположение было верным.Вам нужно двойное расширение переменных.Это может быть достигнуто двумя способами.С отложенным расширением или с помощью команды CALL
.Я выбрал последнее.Для примера я установил счетчик на 13 и продолжал выводить содержимое каждой из переменных после каждого цикла.
@echo off
set _1=13
set _2=13
set _3=13
set _4=13
set "counter=13"
:loop
IF "%counter%"=="0" goto skip
set /a card=%random% %% 4 +1
call set /a _%card%=%%_%card%%% - 1
echo _1=%_1%
echo _2=%_2%
echo _3=%_3%
echo _4=%_4%
set /a counter-=1
goto :loop
:skip
pause
РЕДАКТИРОВАТЬ: Теперь, когда я снова посмотрю на это, вам на самом деле не нужно использоватьCALL
на всех или отложенное расширение, потому что команда SET
позаботится об этом за вас.
@echo off
set _1=13
set _2=13
set _3=13
set _4=13
set "counter=13"
:loop
IF "%counter%"=="0" goto skip
set /a card=%random% %% 4 +1
set /a _%card%-=1
echo _1=%_1%
echo _2=%_2%
echo _3=%_3%
echo _4=%_4%
set /a counter-=1
goto :loop
:skip