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