2018年6月7日 星期四

Batch script 筆記

參考網頁
windows-commands
https://ss64.com/nt/
https://en.wikibooks.org/wiki/Windows_Batch_Scripting

  • 參數

Batch的參數使用 %n (%0、%1、%2、%3 ...) 來代表第n個參數,%0 代表batch檔本身。

%n 還可以使用下列擴充語法,詳細內容可以使用 call /? 來參考:
%~1 - 展開 %1 並移除包圍的引號(")
%~f1 - 展開 %1 為一個完整合格路徑名稱
%~d1 - 只展開 %1 為磁碟機代號
%~p1 - 只展開 %1 為路徑
%~n1 - 只展開 %1 為檔名
%~x1 - 只展開 %1 為副檔名
%~z1 - 顯示 %1 的檔案大小

常見應用

%~dp0
batch檔所在的目錄,常與%CD%作為比較,%CD%代表的是當前的工作目錄。


  • 動態變數

cmd.exe下可使用的動態變數,不會出現在set 命令的環境變數列表中,在每次展開時
都會重新計算一次。


%CD%
展開當前工作目錄的字串。

%RANDOM%
展開一個範圍0到32767間的整數。

%ERRORLEVEL%
展開目前ERRORLEVEL的值。

參考範例
在Batch 中取出字元的ASCII Number


  • 輸出命令重新定向

COMMAND > FILENAME
清除原有內容後再寫入

COMMAND >> FILENAME
在原有內容後寫入

COMMAND < FILENAME
將FILENAME的內容傳入COMMAND

COMMAND_A | COMMAND_B
將COMMAND_A的output傳入COMMAND_B

常見應用

COMMAND > nul
不印出輸出命令結果


  • cd

切換目錄

/d
同時切換磁碟機


  • del

刪除一或多個檔案

/q
Quiet Mode。不會再次詢問是否刪除檔案。


  • endlocal

復原setlocal前的環境變數


  • exit

結束cmd.exe或目前的batch script。

/b
結束目前的batch script而不是cmd.exe。

/b [exitCode]
將ERRORLEVEL variable設為exitCode所設的數字。


  • findstr

搜尋檔案中的字串

/c:string
所要逐字搜尋的字串。若要搜尋多個字串,可用空白字元分隔。

/r /c:string
將string視為regular expression來使用。


  • for 迴圈


使用for 迴圈iterate 項目
for %%PARAMETER in (ITEM1 ITEM2 ITEM3 ...) do COMMAND

一次讀出字串並將其分成獨立的項目(tokens)
for /f ["OPTIONS"] %%PARAMETER in ("Text string to process") do COMMAND

一次讀出command的輸出並將其分成獨立的項目(tokens)
for /f ["OPTIONS"] %%PARAMETER in ('COMMAND_TO_PROCESS') do COMMAND

使用一段範圍的數字iterate
for /l %%PARAMETER in (start,step,end) do COMMAND
start - 起始數字
step - 迴圈數字所要增加的值,可為負數
end - 結束數字


OPTIONS
Key   Description  
delims=xxx   設定分隔字元(預設為空白字元),xxx表示可設定多個字元。  
token=x,y  
token=z*  
token=m-n  
用來決定要取出的item,並且放到parameter中。 
若token=x,就取出第x項item。  
token=x,y,若parameter設為%a,便取出第x與y項item分別置於%a和%b自動變數中。 
token=z*,若parameter設為%a,取出第z項置於%a中,並將第z項後的所有item置於%b中。 
若token=m-n,便取出第m至第n項。 


  • if 判斷式


判斷檔案存在與否
if [not] exist FILENAME COMMAND if [not] exist FILENAME (COMMAND) else (COMMAND)
判斷文字字串是否相符 if [not] STRING1==STRING2 COMMAND
使用數值進行判斷 if [not] ITEM1 compare-op ITEM2 COMMAND if [not] ITEM1 compare-op ITEM2 (COMMAND) else (COMMAND)
/i
忽略大小寫。

compare-op:
EQU - Equal
NEQ - Not Equal
LSS - Less Than
LEQ - Less Than or Equal
GTR - Greater Than
GEQ - Greater Than or Equal


  • set

顯示、設定或移除cmd.exe的環境變數。若不加任何參數,就會顯示所有環境變數。

將變數設為文字字串
set VARIABLE=STRING
將變數設為數學運算後的值
set /a "VARIABLE=expression"

常見應用

set VARIABLE=
VARIABLE初始化

set /a VARIABLE=HEX_NUMBER or OCT_NUMBER
可將十六進位數字(ex: 0x2F) 或八進位數字(ex: 057) 轉換成十進位數字。


  • setlocal

將環境變數帶入到Batch 的local變數中,在Batch執行完或endlocal時結束。

設定或取消延遲變數展開
setlocal {EnableDelayedExpansion | DisableDelayedExpansion}
EnableDelayedExpansion - 延遲變數展開
DisableDelayedExpansion - 取消延遲變數展開

補充說明
延遲變數展開 (EnableDelayedExpansion)


沒有留言:

張貼留言