[英]Batch nested variables
所以,我在批处理中有一些嵌套变量。
它给我带来了问题。
我嵌套变量的原因是因为我通过以下方式模拟数组:
array[0]=1
array[1]=2
array[2]=3
etc
现在,我有一个counter
我希望能够执行%array[!counter!]%
,并且输出将等于!counter! + 1
!counter! + 1
。
但我不能。
我认为这是因为将它包围在%
会使 Windows 尝试尽快扩展变量,并且确实如此,打破了计数器。
所以,相反,为什么不做!array[!counter!]!
? 好吧,我试过了,我认为,而不是将其解释为(array[(counter)])
,其中()
用于显示什么!!
's 持有,Windows 反而将其解释为(array[)counter()
,这对我来说毫无用处。
请记住:每当我使用!!
的,假设我已经完成了setlocal EnableDelayedExpansion
—— 我只是不包括它,因为这对我和读者来说都是一种痛苦。
任何想法如何解决这一问题?
(至少)两种可能的方式。 第一个更快,更详细 - CALL
命令会影响性能。
@echo off
setlocal enableDelayedExpansion
set array[0]=1
set array[1]=2
set array[2]=3
set counter=0
echo first way :
for /l %%# in (1;1;3) do (
for /f %%$ in ("!counter!") do echo !array[%%$]!
set /a counter=counter+1
)
set counter=0
echo second way :
for /l %%# in (1;1;3) do (
call :subr1 !counter!
set /a counter=counter+1
)
goto :eof
:subr1
echo !array[%1]!
goto :eof
这就是我最终做的:
for /l %%a in (1;1;3) do (
echo !array[%%a]!
)
最初,我通过变量counter
使用手动计数器,但是使用for /l
意味着我可以拥有一个计数器而不必将其设置为变量,更重要的是,不要像!varname!
那样调用它!varname!
; 而是像%%varname
,消除混淆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.