為什麼這篇cmd set變數鄉民發文收入到精華區:因為在cmd set變數這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者LPH66 ((short)(-15074))看板Windows標題Re: [問題] bat問題...
※ 引述《KiroKu ()》之銘言:
: 想弄個程式來處理程式結果:
: for %%a in (1 2) do (
: for %%c in (1 2 3 4) do (
: for /f "delims=" %%i in (result%%a-%%c.txt) do (
: set foo=%%i
: )
: echo %foo%--%%a--%%c>>zzzz.txt
: )
: )
: 可是zzzzz.txt裡出現的八行都是一樣的
: 另外抓最後一行有無更快的方式呢?
以下節錄自 set /? (奇怪我記得久遠之前我回過類似的文章啊?!還是不是在這裡回的?!)
===========================================================
最後,系統加入了延遲環境變數展開的支援。在預設狀態下,命令展開會啟
用這項支援,但是您可以在 CMD.EXE 用 /V 命令列參數來啟用/停用這個功
能。 請參看 CMD /?
延遲環境變數展開功能可用來避開展開功能限制。這項限制是發生在命令列
讀取過程,不是發生在執行過程。下面的範例說明了立即展開變數時會發生
的問題:
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)
這個例子永遠無法顯示 echo 訊息,因為在兩個 IF 敘述中的 %VAR% 會
在第一個 IF 敘述被讀入時便被展開。這是因為它是邏輯上包含了 IF 的內
部,而內部又是一個複合敘述。 所以在複合敘述內的 IF 實際上是用
"before" 和 "after" 來比較,而這永遠不會為真。同樣的,下面的例子也
不會作用:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
這個例子中並不會建立目前目錄中所有檔案的清單,相反的只會將 LIST 變
數設為最後一個找到的檔案。同樣地,這是因為 %LIST% 只有在 FOR 敘述
第一次被讀入時才展開,此時 LIST 變數是空的。所以我們實際執行的 FOR
迴圈是:
for %i in (*) do set LIST= %i
這只是重複的將 LIST 設為最後找到的檔案。
延遲環境變數展開讓您可以用一個不同的字元 (驚嘆號) 在執行時展開
環境變數。如果啟用了延遲環境變數展開,上面的例子可以被改寫如下
而正常作用:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
===========================================================
--
edit: 找到了...果然不是在這個版
是在這裡:
┌─────────────────────────────────────┐
│ 文章代碼(AID): #19fuask2 (Programming) [ptt.cc] Re: [問題] 請教DOS batch │
│ 文章網址: http://www.ptt.cc/bbs/Programming/M.1235716406.A.B82.html │
│ 這一篇文章值 55 元 │
└─────────────────────────────────────┘
才半年前的文章難怪記憶猶新 XD
--
有人喜歡邊玩遊戲邊上逼;
也有人喜歡邊聽歌邊打字。
但是,我有個請求,
選字的時候請專心好嗎?
-- 改編自「古 火田 任三郎」之開場白
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.92
※ 編輯: LPH66 來自: 140.112.28.92 (10/17 02:00)