首页 > 解决方案 > 如何将一个静态字符串和一个变量名组合成一个已定义的变量名?

问题描述

在我的批处理文件中,我有几行:

set "line1=bla"
set "line2=what"

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

所以基本上,我会从一些变量开始,这些变量在定义与否方面存在很大差异。line1可以定义,但不能。我希望有一个变量,它是一个数字,每次批处理文件循环充当1inline12in时都会增加一line2。每次批处理文件循环时,该数字都会增加。首先,批处理文件检查是否定义了第 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

这是我对我刚才试图解释的最好的看法。这让我的大脑很受伤。

标签: windowsbatch-filecmd

解决方案


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

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

>>File.txt Echo !Line%Canum%!

条件测试可用于确保仅将包含定义值的变量附加到文件中。

If Not "!Line%Canum%!" == "" >>File.txt Echo !Line%Canum%!

在代码块中执行:

  • 当前值

    For %%i in (!Canum!) Do If Not "!Line%%i!" == "" >>File.txt Echo !Line%%i!

  • 所有值

    For /L %%i in (1,1,!Canum!) Do If Not "!Line%%i!" == "" >>File.txt Echo !Line%%i!


推荐阅读