我不確定我是否理解了腳本樣例最後一行中的評估順序,即使是您的口頭解釋。不過,我想至少我可以通過簡單的例子向你展示如何實現你想要的東西,並且你將研究如何在你的情況下應用這種技術。
基本上,你需要在這裏使用兩種擴展:立即(或者%
擴展)並延遲。
在批處理文件中存在延遲擴展,必須首先啓用(通常使用命令SETLOCAL EnableDelayedExpansion
),然後使用!
而不是%
進行變量評估。考慮下面的例子:
SET ind=1
SET line%ind%=ABC
SETLOCAL EnableDelayedExpansion
ECHO !line%ind%!
ENDLOCAL
在上述例子中,兩個變量被創建,ind
和line1
。第二個名字部分用第一個變量構造。當你爲設置這個變量的值時,不需要延遲擴展,因爲不需要評估賦值的左側部分名稱。但是當它需要評估時,你需要使用延遲擴展。在上述腳本中的命令ECHO
這樣工作的:
儘管這種延遲擴展是最常見的優選的,在上述例子中也可以使用CALL
-expansion實現相同的。下面是重寫使用CALL
-expansion同樣的例子腳本:
SET ind=1
SET line%ind%=ABC
CALL ECHO %%line%ind%%%
基本上,有%
擴張一路,但不同地區在不同的時間進行評估。下面是第二個例子中的延遲評價是如何工作的:
CALL
擴展比較慢,這可能特別表現在循環中。另一方面,!
擴展具有一些含義,特別是因爲使用SETLOCAL
命令來啓用語法。關於my answer to a different question的話題還有更多。
我不確定要達到什麼效果,但是您是否搜索FOR/F,請參閱http://ss64.com/nt/for_cmd.html – 2013-02-17 14:06:05