ОС: Windows 10, версия: 10.0.17134.112
Я пытался ссылаться на переменную, состоящую из динамической переменной, которая требует отложенного расширения, в виде !string!variable!!
. Проблема, с которой я сталкиваюсь, заключается в том, что ее оценивают как [!string!][variable!!]
, а не ![string][!variable!]!
Вот пример того, что я пытаюсь сделать:
@echo off
setlocal EnableDelayedExpansion
::Sets variables - Items to be excluded, and an initial index number to reference these variables
set "_elem1=ex1"
set "_elem2=ex2"
set "_elem3=ex3"
set "_n=1"
::Builds a one-dimensional array excluding some items where item-set is arranged in a specific order
for %%e in (A B C ex1 D E F ex2 G H ex3 I J) do (
if not "!_elem!_n!!"=="%%e" (
set "_array=!_array!!_spc!"%%e""
set "_spc= "
) else (
set /a "_n+=1"
)
)
::Displays actual output
echo %_array%
::Displays DESIRED output
echo "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
pause
По сути, то, что он делает, или, по крайней мере, то, что он должен делать, - это создает отфильтрованный одномерный массив элементов из набора элементов for
, выполняя условный блок. Если "!_elem!_n!!"
не равно "%%e"
, результат для текущей итерации добавляется к сохраненному значению переменной _array
. В противном случае он игнорирует значение текущей итерации и увеличивает индекс на 1, эффективно изменяя значение !_elem!_n!!
на следующей итерации.
Проблема является переменной _n
является динамической и требует отложенного расширения. Я пытаюсь добиться, чтобы переменная !_elem!_n!!
была оценена как !
_elem
!_n!
!
, а не !_elem!
_n!!
После исследования я наткнулся на следующие источники:
Ответы, приведенные в ссылке, действительно полезны, но индекс, используемый в примерах, не является динамическим, и поэтому !_elem%_n%!
подойдет в этих ситуациях, но не в том случае, если индекс динамический. Кроме того, был предоставлен метод, использующий call
, который является умным, но call
не работает с if
s.
У меня заканчиваются идеи здесь. Я бы очень признателен за любые идеи, которые вы могли бы бросить в этом.
Спасибо всем большое !!