Batch file 批处理以不同的方式访问阵列
这是我的剧本:Batch file 批处理以不同的方式访问阵列,batch-file,command-line,Batch File,Command Line,这是我的剧本: @echo off setlocal EnableDelayedExpansion set "memuc=d:\file.exe" set array[0]=foo set array[1]=bar set x=0 :SymLoop if defined array[!x!] ( call "!memuc!" start -n !!array[%x%]!! set /A x=!x! + 1 GOTO :SymLoop ) endlocal 为
@echo off
setlocal EnableDelayedExpansion
set "memuc=d:\file.exe"
set array[0]=foo
set array[1]=bar
set x=0
:SymLoop
if defined array[!x!] (
call "!memuc!" start -n !!array[%x%]!!
set /A x=!x! + 1
GOTO :SymLoop
)
endlocal
数组[!x!]
行不能替换为!阵列[%x%]代码>?我想我必须使用代码>当访问延迟扩展
变量时
%x%
而不是!x代码>?。同样,我想根据x
变量,code>应该是必需的
代码>此处!!阵列[%x%]代码>
我认为你的概念错了。
代码>表示变量的值将尽可能晚地展开
@echo off
SETLOCAL EnableDelayedExpansion
set "_var=stackoverflow"
set "_var=rules" & echo "%_var% !_var!"
由于扩展延迟,这将打印“stackoverflow rules”
现在回答你的问题:
添加1。原因是定义了的。如果您想将实际变量放在那里,您将使用例如您的数组[0]
,这就是为什么您有数组[!x!]
而没有!阵列[%x%]代码>
Addum 2。您必须使用%x%
来进行即时扩展,因为您希望数组[0]
和数组[1]
。如果你想把它写成!x
然后您将搜索%array[!x!]%
中的数组[!x!]
Addum 3。双感叹号(!!
)之所以出现,是因为调用
引入了一个扩展。因此,首先要立即展开%x%
,然后展开数组[0]
,然后展开调用