【问题标题】:How do I combine one static string and a variable name to make one variable name which is defined?如何将一个静态字符串和一个变量名组合成一个已定义的变量名?
【发布时间】:2020-05-05 02:46:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: windows batch-file cmd


【解决方案1】:

有几点:抛弃集合/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!

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多