Windows 命令 - 延迟扩展语法以回显包含另一个数字变量的变量的值

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吗?

先谢谢您的帮助!

答案1

这个问题的解决方法是,$project!$project_number!_control变量必须经过双重扩展才能返回其值。启用延迟扩展时,感叹号不能与变量一起使用多次,就像我在原始代码中所做的那样,如下所示:

!$project!$project_number!_control!

或者像上面所示,在变量的开头和结尾放置感叹号,而应该在变量的开头和结尾放置双百分号(%%),如下所示:

%%$project!$project_number!_control%%

当发生延迟扩展时,此语句将扩展为:

%$project!$project_number!_control%

从上面扩展的变量代码中可以看出,变量的值仍未返回。为此,必须进行第二次扩展。要执行第二次变量扩展,请将语句放在循环中最后一行代码开头的语句call前面。更正后的循环中最后一行代码为:echoforfor

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 命令编号变量的人。 请记住,call当启用延迟扩展时,该语句是执行第二次扩展的关键。

相关内容