2010年11月7日 星期日

BAT大補帖 - Call (06)

若要寫大型的BAT程式,CALL這一個指令就絕對不可以忽略~

它可以提高程式的reuse,可以讓程式更精簡!

CALLGOTO最大的不同在於
GOTO是直接跳到設定的LABEL,並且不會跳回來。
CALLGOTO :EOF配合,當被跳到目的的程式執行完時(執行到GOTO :EOF),會跳回執行CALL的程式的下一行。

例:
call_a.bat

@ECHO OFF
ECHO Hello World!!

CALL :Money

ECHO Good Morning!!

CALL :Money

GOTO :END

:Money
ECHO Hello Money!!
GOTO :EOF

:END
PAUSE

大家想像一下,若:Money這一段的程式有到一百行,你執行兩次CALL :Money不就節省了一百行的指令嗎?
若有寫過C語言的話,那就把GOTO :EOF當作return這一個關鍵字吧~

同時,call指令後面可以接傳入的參數。
例:
call_b.bat
@ECHO OFF
ECHO Hello World!!

CALL :Money 100 "300 - 200"

ECHO Good Morning!!

CALL :Money 200 "400 - 200"

GOTO :END

:Money
ECHO Hello %1 Money!!
ECHO The procedure is %~2
GOTO :EOF

:END
PAUSE


第一個CALL後面會接兩個參數,分別是100"300 - 200",而為什麼要用雙引號把它括起來哩~因為,BAT是以空白當作參數的區隔,所以,若你傳入的參數中內含空白的話,就必需要用雙引號把它括起來。

%1分別%~2分別就是代表傳進來的參數,另外,為什麼%1不需要加~
%~2中間確需要加入~這一個符號哩,有加~符號的,會把參數的值的雙引號移除掉,當然,若他本身沒有雙引號的話,~這一個就沒有效果~

平常在執行BAT檔後面也可以輸入參數~
例:
call_c.bat
@ECHO OFF
IF /I "%~1" EQU "ccd9527" (
ECHO HELLO CCD9527!!
) ELSE (
ECHO HELLO EVERYONE!!
)
PAUSE


執行的時候,請用以下兩個方式分別執行
%> call_c.bat ccd9527

%> call_c.bat
透過這一個方式,可以讓使用者決定要使用哪一個流程~非常之好用~

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

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

沒有留言: