如何在echo命令中使用嵌套变量

时间:2017-01-06 17:21:31

标签: batch-file

如何编写一次使用两个嵌套变量,如数组?我试图创建一些由用户指定的变量(数组索引从1到该数字),并且它们的名称也由用户指定(数组名称),但是当我这样做时,不会返回任何内容。有人可以帮帮我吗?

echo how many people?
set /p number=
echo.
echo.
for /l %%a in (1,1,%number%) do (
    echo name of %%a person
    set /p s%%a =
    echo.
    echo.
    echo.
    if %%a==%number% (
        echo names are
        pause
        for /l %%n in (1,1,%number%) do (
            echo name %%n is %s%%a%
        )
    )
)

2 个答案:

答案 0 :(得分:1)

所以你要做的是创建一个伪数组,因为批处理文件本身没有数组。因此,您需要使用延迟扩展来获得预期的输出。

@echo off
SetLocal EnableDelayedExpansion
echo how many people?
set /p number=
echo.
echo.
for /l %%a in (1,1,%number%) do (
    echo name of %%a person
    set /p s%%a=
    echo.
    echo.
    echo.
    if %%a==%number% (
        echo names are
        for /l %%n in (1,1,%number%) do (
            echo name %%n is !s%%n!
        )
    )
)
pause

答案 1 :(得分:0)

您缺少DelayedExpansion:

在批处理中,一次关闭的括号内容块会立即计算出来,因此在其中访问时,使用正常%myVar%将无法显示其中更改的变量值。

要执行此操作,请在脚本顶部添加setlocal EnableDelayedExpansion,然后将%myVar%更改为!myVar!

顺便使用命令@echo off可以抑制大量不必要的命令行输出:)