繁体   English   中英

批量嵌套变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM