2010年11月2日 星期二

BAT大補帖 - SET (02)

這裡要介紹的是SET指令。若ECHO是輸出指令,那麼SET就是設定與輸入指令。

以下的例子就是設定YourName變數的內容為ccd9527,那麼要如何確認YourName變數內容是正確的哩?當然就是使用ECHO來確認囉~
yourname.bat

@ECHO OFF
SET YourName=ccd9527
ECHO Your Name is %YourName%
PAUSE


在與使用者的互動中,除了可以印出字串給使用者看的ECHO指令,用來接收使用者的輸入指令SET也是另一個重要的角色。
SET後面加一個/P的參數,後面可以提示使用者輸入的提示,當使用者輸入,則會被存到前面的變數!
yourname.bat
@ECHO OFF
SET /P YourName="Please input your name: "
ECHO Your Name is %YourName%
PAUSE


在BAT中,預設是把所有的變數內容當作字串來使用,若要把內容當作數字作加減運算時,必需要加上/A的參數。
add.bat
@ECHO OFF
SET VALUE=1
ECHO %VALUE%
SET /A VALUE=%VALUE%+1
ECHO %VALUE%
PAUSE


若單單只有打SET指令,後面沒有接任何參數,則會列出目前所有環境變數的資料。
若能善用這一些環境變數,將會大大簡化程式碼的大小,而且也會更彈性喔~
env.bat
@ECHO OFF
SET
PAUSE

有幾個動態環境變數會被展開但是不會出現在SET所顯示的環境變數列表中
%CD% - 展開為含目前目錄的字串。
%DATE% - 展開為與 DATE 命令格式相同的目前日期字串。
%TIME% - 展開為與 TIME 命令格式相同的目前時間字串。
%RANDOM% - 展開為一個在 0 和 32767 之間的整數亂數值。
%ERRORLEVEL% - 展開為目前的 ERRORLEVEL 值
%CMDEXTVERSION% - 展開為目前的命令處理擴充功能的版本號碼。
%CMDCMDLINE% - 展開為執行命令處理器前的原始命令列。

只有在bat檔案有用的環境變數
%~dp0 - 表示被執行的bat檔的所在位置

另外,要善用說明檔~
help印出目前系統可以使用的指令
SET /?
通常裡面會有很多解釋和例子,值的參考!!

進階用法
Q: 若有一個變數VALUE的內容值為12 34,如何把空白填成0
A:
switch.bat
@ECHO OFF
SET VALUE=12 34
ECHO %VALUE%
ECHO %VALUE: =0%
PAUSE

[2010.11.06 補充]
這裡的意思是說,把變數裡面的空白字元0這一個字元來取代~
我所知道在處理%time%這一個變數會用到!
請在晚上十二點過後到早上十點之前執行ShowTime.bat這一個檔案,很恐怖,請做好心理準備後在服用~
ShowTime.bat

因為,在bat檔中,空白字元是當作分格參數的特殊字元,有時候很讓人討厭(會造成程式流程錯誤),所有,有時候,我們必需有以上的處理!

@ECHO OFF
Set Now=%TIME%
ECHO %Now%
ECHO %Now: =0%
PAUSE


Q: 如何印出字串,但是,確不換行,再輸入第一筆資料?
A:
NotTurnLine.bat
@ECHO OFF
SET /P=First<NUL
SET /P=Second<NUL
PAUSE


[總結]
在這裡,你應該學會了以下指令或關鍵字的用法
SET

4 則留言:

小中 提到...

switch.bat
不太懂,而且執行起來怪怪的

冰燕 提到...

有補充了,你在看一下~~

小中 提到...

請在晚上十二點過後到早上十點之前執行ShowTime.bat這一個檔案,很恐怖,請做好心理準備後在服用

===> 大騙子,明明是因為那個時段的"小時"式個位數

小中 提到...

NotTurnLine.bat
不太懂ㄝ