doc for 迴圈
for 迴圈 批次檔的 for 迴圈很重要,但有些特性比較隱晦,不容易駕馭,下面稍加整理需注意使用之處 for 迴圈初始化變數,在撰寫為批次檔時,請使用 %%variable,而在命令列執行時要改用 %variable。 for 迴圈初始化變數有大小寫的區分,所以 %%i 不同於 %%I。 for 迴圈內的變數會有取值異常的情形。 以下針對第3點取值異常的情形作一說明,迴圈的敘述通常是以下列格式撰寫,左括弧與 do 同一行,右括弧放在最後面獨立成行 for %%i in (*) do ( echo %%i timeout 1 ) 但其實批次檔會把迴圈內的敘述集結成一行變成 for %%i in (*) DO echo %%i & timeout 1 但就因為集結成一行的關係,批次檔在命令解譯器進行直譯時,會對每一行敘述中的變數進行預先賦值的動作,因此會造成同一行敘述中,對變數改變其值卻無效的情形,請猜一下底下這個範例會顯示的值是甚麼? @echo off set var=Peter set var=John & echo %var% timeout 6 結果仍是 Peter ,因為針對第3行,命令解譯器會預先賦值給%var%,然後才進行 set var = John,若要正確取出此變數異動後的值 John ,必須 啟用變數延遲展開(SETLOCAL ENABLEDELAYEDEXPANSION) 的功能,在開啟用變數延遲展開功能之後,取用變數的方式要由 %var% 更改為 !var!,將範例修改如下 @echo off SETLOCAL ENABLEDELAYEDEXPANSION set var=Peter set var=John & echo !var! timeout 6 批次檔中只要是利用括弧()分成多行撰寫的指令,實際上都看成一行,在括弧()裡面取用變數時都會遇到需要開啟用延遲環境變數擴充功能的問題,一定要特別注意。 以下直接說明範例不特別解釋語法,細節請透過 for /? 學習 找出符合條件之檔案的 for 迴圈 顯示批次檔存在的目錄中所有符合 .mp4 .avi *.mpg的檔案名稱 for %%i in (*.mp4 *.a...