Windows 如何组合一个静态字符串和一个变量名,以生成一个已定义的变量名?

Windows 如何组合一个静态字符串和一个变量名,以生成一个已定义的变量名?,windows,batch-file,cmd,Windows,Batch File,Cmd,在批处理文件中,我有一些行: set "line1=bla" set "line2=what" 我想知道如何将一个变量放在一个静态字符串的末尾,以等于一个定义的变量名。 所以,canum是行号。 变量%line1%存在,但为了循环上面的代码,以便可以将任意多行写入文件,我将行号作为一个变量,每次循环都会增加,然后检查与line组合的变量是否存在。这很难解释 所以基本上,我会从一些变量开始,这些变量在定义与否上是不同的第1行,但无法定义。我希望有一个变量,该变量是一个数字,当批处理文件循环充当l

在批处理文件中,我有一些行:

set "line1=bla"
set "line2=what"
我想知道如何将一个变量放在一个静态字符串的末尾,以等于一个定义的变量名。 所以,
canum
是行号。 变量
%line1%
存在,但为了循环上面的代码,以便可以将任意多行写入文件,我将行号作为一个变量,每次循环都会增加,然后检查与
line
组合的变量是否存在。这很难解释

所以基本上,我会从一些变量开始,这些变量在定义与否上是不同的<可以定义代码>第1行,但无法定义。我希望有一个变量,该变量是一个数字,当批处理文件循环充当
line1
中的
1
line2
中的
2
时,该数字会增加一倍。每次批处理文件循环时,该数字都会增加。首先,批处理文件检查第n行是否已定义,如果已定义,则使用
echo%lineNUM%>>file.txt(NUM为第n个数字)将其作为附加行回显到文件中。但是,我不知道如何将一个静态字符串(在我的例子中是
test
)和一个变量(在我的例子中是
%canum%
)组合成一个定义的变量名

:writeloop_setuplogical
set /a canum = %canum% + 1
if NOT defined !line%canum%! :done
echo !line%canum%!>>file.txt
这是我对刚才试图解释的内容的最好理解。
这让我的大脑受伤。

有两点:在set/A中放弃自引用,您所需要的就是
set/A canum+=1
。批量访问数组需要在代码块(括号)内延迟扩展索引变量.For/L循环用于执行此操作,因为“组合”变量可以使用For循环变量展开-
!展开[%%i]!

为了防止错误输出,重定向语法应该是:

>>File.txt Echo !Line%Canum%!
条件测试可用于确保仅将包含定义值的变量附加到文件中

If Not "!Line%Canum%!" == "" >>File.txt Echo !Line%Canum%!
要在代码块内执行:

  • 当前值

    对于(!Canum!)中的%%i,如果不是“!Line%%i!”==”>>File.txt Echo!Line%%i!

  • 所有价值观

    对于(1,1,!Canum!)中的/L%%i,如果不是“!Line%%i!”==”>>File.txt Echo!Line%%i!