最近在用Bat Script在寫一些自動化的東西, 卻發現了一些非常奇怪的問題
比如說以下我想用FOR迴圈去批次執行一個陣列
::
@ECHO OFF
FOR %%A IN (First:1 Second:2 Third:3) DO (
SET "VAR=%%A"
SET "VAR=%VAR::=_%"
ECHO %VAR%
)
這樣子執行下去 是不會Print 任何東西的
為什麼會這樣子呢...因為在一開始 Bat就會把他的變數(包在%中) 擴展
所以第二個指定就變成這樣 :
SET "VAR="
事實上 對Bat而言 他看到的程式碼應該會變成這樣 :
SET "VAR=First:1"
SET "VAR="
ECHO %VAR%
SET "VAR=Second:2"
SET "VAR="
ECHO %VAR%
SET "VAR=Third:3"
SET "VAR="
ECHO %VAR%
也就是一開始就會進行擴張解釋!
解決方法是甚麼呢?
首先 要在開頭加上
SETLOCAL EnableDelayedExpansion
這可以開啟Bat 的延遲擴解
然後對於要操作的變數 將%置換成!
::
@ECHO OFF
FOR %%A IN (First:1 Second:2 Third:3) DO (
SET "VAR=%%A"
SET "VAR=!VAR::=_!"
ECHO !VAR!
)
像這樣
就可以成功Print出我們要的結果了
First_1
Second_2
Third_3
Chiaxin