я пытаюсь echo
ЗНАЧЕНИЕ переменной, имя которой содержит другую переменную ($project!$project_number!_control
) при использовании отложенного расширения. Я не могу понять синтаксис для этого. Вот код:
@echo off
setlocal enabledelayedexpansion
set $loop_counter=
for %%g in (1,2,3,4,5,6,7,8) do (
set /a $loop_counter+=1
if !$loop_counter! gtr 4 (
echo.
rem echo $loop_counter = !$loop_counter!
set /a $project_number=!$loop_counter!-4
echo $project_number = !$project_number!
set $project!$project_number!_control=Project Description # !$loop_counter!
echo $project!$project_number!_control = !$project!$project_number!_control!
)
)
echo.
pause
echo.
set
echo.
pause
Строка кода, с которой у меня возникла проблема, - это последняя строка в for
цикл:
echo $project!$project_number!_control = !$project!$project_number!_control!
В частности, это код справа от знака равенства, который повторяет ЗНАЧЕНИЕ $project!$project_number!_control
переменная, с которой у меня проблемы. В set
команда (которая запускается после pause
команда в приведенном выше коде) ясно показывает, что значения «Описание проекта № 5», «Описание проекта № 6», «Описание проекта № 7» и «Описание проекта № 8» были правильно присвоены соответствующим project1_control, project2_control, project3_control и project4_control, переменные.
Может ли кто-нибудь сказать мне, какой синтаксис использовать для отображения ЗНАЧЕНИЯ $project!$project_number!_control
переменная?
Заранее спасибо за помощь!
Решение этой проблемы в том, что $project!$project_number!_control
переменная должна подвергнуться двойному раскрытию, чтобы вернуть свое значение. Восклицательные знаки нельзя использовать более одного раза с переменной, когда включено отложенное раскрытие, как я сделал в исходном коде ниже:
!$project!$project_number!_control!
Вместо восклицательных знаков, помещенных в начало и конец переменной, как показано выше, в начале и в конце переменной следует поставить двойные знаки процента (%%) следующим образом:
%%$project!$project_number!_control%%
Когда происходит отложенное расширение, этот оператор расширяется до:
%$project!$project_number!_control%
Как видно из приведенного выше расширенного кода переменной, ЗНАЧЕНИЕ переменной все еще не возвращается. Для этого необходимо ВТОРОЕ расширение. Чтобы выполнить второе раскрытие переменной, call
заявление помещается перед echo
оператор в начале последней строки кода в for
петля. Исправленная последняя строка кода в for
цикл:
call echo $project!$project_number!_control = %%$project!$project_number!_control%%
Когда код выполняется с исправленной строкой кода, все работает, как ожидалось. Полный список исправленных кодов теперь:
@echo off
setlocal enabledelayedexpansion
set $loop_counter=
for %%g in (1,2,3,4,5,6,7,8) do (
set /a $loop_counter+=1
if !$loop_counter! gtr 4 (
echo.
rem echo $loop_counter = !$loop_counter!
set /a $project_number=!$loop_counter!-4
echo $project_number = !$project_number!
set $project!$project_number!_control=Project Description # !$loop_counter!
call echo $project!$project_number!_control = %%$project!$project_number!_control%%
)
)
echo.
pause
echo.
set
echo.
pause
Я надеюсь, что это поможет кому-то, кто боролся с использованием нумерованных переменных WIndows Command. Помните, call
оператор является ключом к выполнению второго раскрытия, если включено отложенное раскрытие.