【发布时间】:2016-06-23 12:10:44
【问题描述】:
我想拥有:
a=id
b=name
c=age
这是我写的批处理窗口文件:
setlocal enabledelayedexpansion
set MY_LIST[0]=id
set MY_LIST[1]=name
set MY_LIST[2]=age
set /A COUNTER=0
FOR %%A IN (A B C) DO (
ECHO %%A=%MY_LIST[!COUNTER!]%
set /A COUNTER+=1
)
endlocal
为什么这不起作用?
【问题讨论】:
-
是什么让你认为批处理文件有数组索引? (提示:他们没有!)你可以得到类似你正在尝试的东西:删除所有提及
COUNTER,使用for %%a in (0 1 2)(或for /l构造)然后echo %%a=!MY_LIST[%%a]!。您需要!来访问(三个不同的)MY_LIST变量,因为您每次都在循环构建名称。 -
@TripeHound "如果初学者会问:“如何用 C 语言编写消息?”,你认为正确的答案应该是:'你不能。C 语言可以不正式支持任何 I/O 语句,但是您可以通过库函数模拟此类操作'?当然不是!...好吧,在我看来,对于 Batch 中的数组,应该使用相同的方法。" -- Antonio Acini;除非限制直接相关(即尝试调用数组的 .length 方法),否则声称 Batch 语言不支持数组是没有效率的。
-
我试图指出——可能比我应该更半开玩笑/讽刺地指出(如果有任何冒犯,请向 OP 道歉)——这些不是 数组——它们只是多个环境变量,它们的名称恰好有方括号。我没有看到你引用的 Q/A(也没有意识到人们非正式地想到了“批处理文件中的数组”)……读过之后,我个人倾向于支持@987654322 @ 因为使用类似数组的名称会带来太多的包袱/期望。
-
@TripeHound 它还提高了可读性,清楚地传达了作者对变量集合的预期用途。变量显然是相关值的列表,单个列表对象的分配属性(从功能上讲)。 OP 很清楚,他不能调用此列表中其他语言中常见的方法。他显然没有问为什么不能
MY_LIST.push("new value")。他的代码组织良好,不值得批评“这些不是数组”如何解决他的问题。
标签: batch-file