快樂的生活工作

當你寫Batch的時候,常常會拿寫java Delphi的思維來寫Batch
至少對我來說這是第二次發生了
這次要記錄的是『變數』的設定
下面的範例中,存成C:\TESTSET.BAT
執行方式:CMD.EXE下 執行C:\TEST.BAT


@IF exist C:\TEST.TXT (
@FOR /F "tokens=*" %%A IN ('VER') DO @SET VERNO=%%A
@ECHO Windows Version : %VERNO:~-17%
)

寫過一般程式的人,不難理解最後會顯示 Windows Version : XXXX
只要C:\TEST.TXT 存在,就可以顯示WINDOWS現在的版本
但是不然,
主要是XP下的CMD環境,有啟用『延遲環境變數』的功能,
看了SET /? 說明不是很明白
只能說在if for loop內設定變數 要小心了

修改方式:
1.cmd 加入/v參數 來執行bat檔
2.bat 開頭加入setlocal EnableDelayedExpansion
跟變數前後的%使用!取代

修正後


setlocal EnableDelayedExpansion
@IF exist C:\TEST.TXT (
@FOR /F "tokens=*" %%A IN ('VER') DO @SET VERNO=%%A
@ECHO Windows Version : !VERNO:~-17!
)

以下為CMD下 set /?的範例


set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)

修正後


set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
創作者介紹
創作者 味味A 的頭像
味味A

味味A

味味A 發表在 痞客邦 留言(1) 人氣()


留言列表 (1)

發表留言
  • Perry
  • 太感謝你這篇文章
    這問題困擾好久 @ @