Назад | Перейти на главную страницу

Команда Windows - Синтаксис отложенного расширения для отображения ЗНАЧЕНИЯ переменной, содержащей другую числовую переменную

я пытаюсь 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 оператор является ключом к выполнению второго раскрытия, если включено отложенное раскрытие.