我正在處理一個腳本以獲取每列的最大長度,我試圖在_c1 ... n vars中存儲最大長度的長度。列數未知。DOS使用EnableDelayedExpansion批量嵌套變量名稱
我能夠獲得每列的長度,創建變量來存儲每個集合_c!i! =!n!,n是長度爲 ,但爲了設置特定列的最大長度,我需要將當前值與最大值進行比較,並使用類似!_c !! i!哪些不起作用,有什麼想法如何引用變量的哪部分名稱來自另一個變量?
謝謝...
我正在處理一個腳本以獲取每列的最大長度,我試圖在_c1 ... n vars中存儲最大長度的長度。列數未知。DOS使用EnableDelayedExpansion批量嵌套變量名稱
我能夠獲得每列的長度,創建變量來存儲每個集合_c!i! =!n!,n是長度爲 ,但爲了設置特定列的最大長度,我需要將當前值與最大值進行比較,並使用類似!_c !! i!哪些不起作用,有什麼想法如何引用變量的哪部分名稱來自另一個變量?
謝謝...
我假設你正在使用的延遲擴展字符,因爲你是一組括號內的工作「()」。這樣做會讓你的過程更加困難。我知道這種方法比較容易閱讀,但編碼起來很困難。
在括號裏面,我知道只有一種方法可以訪問一個變量,這個變量是由一個或多個變量構建的。那就是使用call
函數使組合變量「激活」。此方法適用於括號內部和外部。
這裏是一個小例子:
@echo off
setlocal enabledelayedexpansion
(
set i=10
set _c!i!=something
:: below is equivalent to echo !_c10!
call echo %%_c!i!%%
)
endlocal
輸出:
something
可以在XP做幾乎在它前面使用CALL
的一切,你能沒有它,但還是越早不能調用像if
這樣的內部命令,只能調用像FIND.EXE這樣的「外部」程序。
如果你能可能使用call :label
聲明上班一套支架之外,你可以簡單地訪問這樣的變量:
@echo off
setlocal enabledelayedexpansion
set i=10
set _c!i!=something
:: The below 2 statements are equivalent to `echo %_c10%`
echo !_c%i%!
call echo %%_c!i!%%
endlocal
輸出:
something
something
的CALL技術建議由詹姆斯K將工作,但它是相對緩慢,可能是不安全的,取決於變量的內容。
下看起來比較複雜,但它顯著更快,更可靠的是:
for %%A in (!i!) do echo !_c%%A!
你的情況有可能是第三種方案是可能的,如果你的變量只包含數字。
@echo off
setlocal enabledelayedexpansion
(
set i=10
set _c!i!=4711
set /a tmp=_c!i!
echo !tmp!
)
這工作,爲SET /A
可以訪問一個變量的內容沒有明確的擴張charaters的NEDD。