windows - 如何将一个静态字符串和一个变量名组合成一个已定义的变量名?
问题描述
在我的批处理文件中,我有几行:
set "line1=bla"
set "line2=what"
我想知道如何将变量放在静态字符串的末尾以等于定义的变量名。所以,canum
是行号。该变量%line1%
存在,但是为了循环上面的代码,以便我可以将任意多的行写入文件中,我会将行号作为变量,每次循环时都会增加,然后检查变量是否组合与line
存在。很难解释。
所以基本上,我会从一些变量开始,这些变量在定义与否方面存在很大差异。line1
可以定义,但不能。我希望有一个变量,它是一个数字,每次批处理文件循环充当1
inline1
或2
in时都会增加一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
这是我对我刚才试图解释的最好的看法。这让我的大脑很受伤。
解决方案
几点:抛弃 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!
推荐阅读
- python - Python - Dataframe - 将列数据拆分为新列 - 解释一些代码的含义
- php - 如何在 PHP 登录脚本中验证来自 SQL 的串联?
- xml - 未能检索到正确的节点数据
- mysql - 如何在mysql中将点添加到多边形或几何的所有点?
- python - Python 3.7 导入命令出现奇怪的 Pylint 错误
- ios - MKAnnotationView:在 annotationView 下方有文本并渲染 View
- javascript - 基于参数的单例模式在javascript中创建promise
- html - 根据元素数量调整元素大小
- python - tf.data.Dataset + tf.lookup.index_table_from_file 导致“表未初始化”错误
- html - 与 Wordpress 中的自定义 CSS 和重力形式对齐