新聞速報

        

2022年9月26日 星期一

批次檔 變數 使用注意事項

 

取用變數

取用變數時,則需在變數前後加上%

echo %myname%

取消變數

取消變數時,只需依照設定變數的方式,但值是空白即可

set var=

變數的運算

set 使用 /a 參數,可使後面的敘述成為運算式

set var=6

set /a var+=3

 

 

延遲變數展開 (EnableDelayedExpansion)

在剛開始寫Batch的迴圈(for)的時候,都會遇到一個問題,就是在迴圈中,想要去改變 (set) 某個Variable的值,可是卻無法改變。

 

for /f "tokens=1" %%Q in ('dir VIDEO\*.*/s^|find "個檔案"') do  set FileQty=%%Q

echo VIDEO資料夾內的檔案數量 [%FileQty%] 個檔案 

輸出結果:   VIDEO資料夾內的檔案數量 [0] 個檔案

 

要得到預想的結果就要使用setlocal EnableDelayedExpansion來延遲變數展開,使其在執行的階段才會被展開。

注意在取值時,要延遲展開的變數需使用 !var! 才會有效果。

for /f "tokens=1" %%Q in ('dir VIDEO\*.*/s^|find "個檔案"') do  set FileQty=%%Q

echo VIDEO資料夾內的檔案數量 [!FileQty!] 個檔案 

輸出結果:   VIDEO資料夾內的檔案數量 [4 ] 個檔案

 

PS: 輸出的數值出現了,但是後方卻多了一個空白。 進行後續邏輯判斷會錯誤,可能是使用 !! 造成 (但是不使用又不行…)

 

延遲變數展開-再修正

for /f "tokens=1" %%Q in ('dir VIDEO\*.*/s^|find "個檔案"') do  set /a FileQty=%%Q

echo VIDEO資料夾內的檔案數量 [!FileQty!] 個檔案 

輸出結果:   VIDEO資料夾內的檔案數量 [4] 個檔案      正確無誤

 

沒有留言:

張貼留言