簡體   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