Я хочу создать автоматизированный массив тестирования в Команде Windows, используя одну инструкцию кода в качестве ЗНАЧЕНИЯ для каждой записи массива тестирования. Вот как выглядит определение массива для первых двух записей в массиве $ code_test [xx]:
set $code_test[00]=if 5 lss 10 (echo IT WORKED)
set $code_test[01]=if 5 lss 10 (echo BUG OFF)
Я хочу выполнить VALUE каждой записи массива $ code_test [xx] (которая является оператором тестового кода), используя цикл for /l
следующим образом:
for /l %%g in (0,1,1) do (
echo $code_test[0%%g]
!$code_test[0%%g]!
echo.
)
Полный код:
@echo off
setlocal enabledelayedexpansion
set $code_test[00]=if 5 lss 10 (echo IT WORKED)
set $code_test[01]=if 5 lss 10 (echo BUG OFF)
for /l %%g in (0,1,1) do (
echo $code_test[0%%g]
!$code_test[0%%g]!
echo.
)
echo.
pause
Когда я выполняю полный код, я получаю следующее сообщение об ошибке при выполнении строки кода !$code_test[0%%g]!
:
«если» не распознается как внутренняя или внешняя команда, работоспособна
программа или командный файл
Я прочитал отличную статью здесь о том, как анализируется команда IF, но я не вижу ничего, что выскакивает из-за того, почему мой код дает сбой. Можно ли даже сделать то, что я пытаюсь сделать?
Любая помощь приветствуется!
UPDATE:
Я обнаружил, что @sst является правильным, когда я использовал команду set
в строке кода set $code_test[01]=if 5 lss 10 (set /a $var1+=1)
:
@echo off
setlocal enabledelayedexpansion
set $var1=0
set $code_test[00]=if 5 lss 10 (echo IT WORKED)
set $code_test[01]=if 5 lss 10 (set /a $var1+=1)
for /l %%g in (0,1,1) do (
echo $code_test[0%%g]
cmd /c !$code_test[0%%g]!
echo $var1 = !$var1!
echo.
)
echo.
pause
Команда set /a $var1+=1
не увеличила значение $ var1, как ожидалось. Фактически, он помещает «1» перед меткой $ var1, когда выполняется строка кода echo $var1 = !$var1!
. Я еще не пробовал решение, предлагаемое @Magoo. Я действительно хотел бы использовать решение cmd /c
вместо вызова подпрограммы. Могу ли я что-нибудь сделать, чтобы команда set
работала с опцией cmd /c
?