O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
我的 Windows 平台自動化經驗
基礎批次檔撰寫實務
Windows Batch Scripting
多奇數位創意有限公司
技術總監 黃保翕 ( Will 保哥 )
部落格:http://blog.miniasp.com/
介紹 Windows 批次檔
Windows Batch Scripting Introduction
認識 cmd.exe 命令直譯器 (1)
• 開啟命令提示字元 (Command Prompt)
– [開始] -> [程式集] -> [命令提示字元]
– Win-R  cmd
– Win-X-C 命令提示字元
– Win-X-A 命令提示...
認識 cmd.exe 命令直譯器 (2)
• 查詢 cmd.exe 版本
– 輸入 VER 命令可以查詢目前執行的 Windows 版本
• 查詢 cmd.exe 命令清單
– 輸入 HELP 可以查詢命令提示字元下所有可用的命令
• 查詢命令...
內建命令與外部命令
• 內建命令 (Built-in commands)
– 內建在 cmd.exe 直譯器的命令
– 無法變更、更名或用任意程式取代這些命令
– 完整的內建命令清單
• 外部命令 (External commands)
– 內...
關於 Windows 批次檔
• 主要用途
– 在 cmd.exe 命令直譯器的執行環境下執行一個或多個命令
• 可用副檔名
– *.bat
– *.cmd
• 簡單批次檔範例 ( sample.bat )
@ECHO OFF
ECHO Hel...
了解 Windows 批次檔基礎觀念
Windows Batch Scripting Fundamental
命令直譯器如何運作
• 命令直譯器在解析命令時的邏輯相當精妙且複雜!
• 命令直譯器的運作方式
– 預設會在批次檔中逐行解譯命令
– 直接在命令提示字元執行命令與在批次檔中執行命令幾乎完全相同
– 在批次檔中執行每一行命令時,都會自動重新載入批...
變數代入 (Variable substitution)
• 環境變數
– 內建環境變數 (Windows Environment Variables)
– 系統環境變數 (預設套用在所有使用者的執行程序)
– 使用者環境變數 (預設套用在目前...
命令直譯器有哪些內建變數
變數名稱 變數值
%CD% 目前路徑 (Current Directory)
%TIME% 目前系統時間 ( HH:MM:SS.mm )
%DATE% 目前系統日期 ( 會依據系統地區設定格式來顯示 )
%RANDOM...
在批次檔中使用 % 的注意事項
• 在命令提示字元中
– 可直接執行 ECHO % 輸出一個百分比符號
• 但在執行批次檔時
– 要輸出百分比符號就必須寫成 ECHO %% 才行!
• 在批次檔中只要單獨出現一個 % 字元時,都會自動被忽略!
...
特殊字元 (Quoting and escaping)
• 正常來說,大部分的字元都不需要用雙引號括起來
• 需要加上雙引號的特殊字元有
– 空白字元
– &()[]{}^=;!'+,`~
– <>|
• 如果不用雙引號就必須使用 ^ 跳脫字元...
命令語法 (Syntax)
• 基本命令組成
– 命令名稱
– 命令參數
– 執行管線 (pipe) + 另一個命令
• 基本命令範例
– dir * | more
• 命令名稱:dir
• 命令參數:*
• 執行管線 + 另一個命令:| mo...
命令組合語法
• 要在「一行命令」中組合多個命令,可以用以下語法
• &
– 左邊的命令執行完畢 (無論成功或失敗),右邊的命令就會立刻執行
– 範例:dir *.txt & dir *.bat
• &&
– 左邊的命令執行成功 (ERRORL...
群組命令語法
• 要在「一行命令」中組合多個命令並集中輸入結果,可以用
小括號將命令群組起來,並統一輸出訊息
• ( )
– 範例:(dir *.txt & dir *.bat) > a.txt
– 範例:(dir *.txt && dir *...
如何將一行命令拆解成多行命令
• 批次檔範例
IF 1 EQU 1 ECHO Equal & ECHO Indeed, equal
• 利用 ^ 將一行命令拆解成多行命令 (最後還是當成一行執行)
@ECHO OFF
IF 1 EQU 1 ^
...
訊息轉向 (Redirection)
• 標準訊息 IO 區分成三種
– 標準輸入 (standard input) 編號 0
– 標準輸出 (standard output) 編號 1
– 標準錯誤 (standard error) 編號 2...
進階的訊息轉向語法
• 2>NUL
– 將應用程式的標準錯誤轉向到 NUL (null device) (隱藏輸出的意思)
– dir *.txt 2>NUL
• 2> filename
– 將應用程式的標準錯誤轉向到檔案 (覆寫檔案)
• 2...
Windows 批次檔小技巧
Windows Batch Scripting Tips & Tricks
實作 touch 命令
• C:WindowsSystem32touch.cmd
@ECHO OFF
IF EXIST %1 (
COPY /B %1+,, %1 >nul
) ELSE (
echo. 2>%1
)
20
設定應用程式別名
• C:WindowsSystem32np.cmd
@ECHO OFF
start notepad %1
21
深入了解批次檔的語法細節
• 認識 ERRORLEVEL 變數
• 進階字串處理
• 參數處理
• 萬用字元
• 取得使用者輸入
• 認識 %~ 特殊變數 (Percent tilde)
• 自訂函式
• 基本數值運算
• 尋找檔案
• 命令提...
相關連結
• Windows Batch Scripting - Wikibooks, open books for an open world
• An A-Z Index of the Windows CMD command line - ...
聯絡資訊
• The Will Will Web
記載著 Will 在網路世界的學習心得與技術分享
– http://blog.miniasp.com/
• Will 保哥的技術交流中心 (臉書粉絲專頁)
– http://www.facebo...
Próximos SlideShares
Carregando em…5
×

我的 Windows 平台自動化經驗:基礎批次檔撰寫實務

7.986 visualizações

Publicada em

有許多 Windows 平台的開發人員,並不習慣以「命令列工具」來解決問題,但是這幾年自動化的需求越來越高,無論是 CI/CD 有需求,連前端、後端開發人員,也都漸漸地開始習慣以命令列工具來完成一些重複性的命令列操作,例如前端的 npm、Angular CLI、Ionic CLI、Cordova 等等,或是後端的 .NET Core 的 .NET Core CLI,都大量的利用 CLI 工具輔助開發。

在 Windows 平台撰寫自動化腳本,目前有許多解決方案,比較傳統的有 Batch 批次檔,從早期的 DOS 年代沿用至今。還有新一代、更強大的 PowerShell 可以更優雅的解決許多 Windows 平台自動化的問題。也有許多人開始用 Node.js 撰寫許多自動化腳本。

本次直播活動分享的重點,將會著重在 Windows Batch 批次檔開發入門,幫助各位快速地了解在 Windows 作業系統下如何撰寫自動化腳本,先了解一些重要的核心觀念、平台限制、注意事項,再介紹一些 Windows Batch 的基礎語法,最後會分享一些常見的批次檔內容以及常見應用技巧。

直播當晚還可以讓大家任意提問,也歡迎攜帶自己寫過的批次檔前來交流,看不懂的語法也可以帶來提問,歡迎舊雨新知相約好友一同參加吧! 

Publicada em: Tecnologia
  • Seja o primeiro a comentar

我的 Windows 平台自動化經驗:基礎批次檔撰寫實務

  1. 1. 我的 Windows 平台自動化經驗 基礎批次檔撰寫實務 Windows Batch Scripting 多奇數位創意有限公司 技術總監 黃保翕 ( Will 保哥 ) 部落格:http://blog.miniasp.com/
  2. 2. 介紹 Windows 批次檔 Windows Batch Scripting Introduction
  3. 3. 認識 cmd.exe 命令直譯器 (1) • 開啟命令提示字元 (Command Prompt) – [開始] -> [程式集] -> [命令提示字元] – Win-R  cmd – Win-X-C 命令提示字元 – Win-X-A 命令提示字元 (系統管理員) • 結束命令提示字元 – 輸入 EXIT 即可退出命令提示字元 • 查詢 cmd.exe 使用說明 – 輸入 CMD /? 可以查詢命令直譯器的基本用法 3
  4. 4. 認識 cmd.exe 命令直譯器 (2) • 查詢 cmd.exe 版本 – 輸入 VER 命令可以查詢目前執行的 Windows 版本 • 查詢 cmd.exe 命令清單 – 輸入 HELP 可以查詢命令提示字元下所有可用的命令 • 查詢命令清單使用說明 – 輸入 HELP 命令名稱 即可查詢特定命令的使用說明 • 兩種命令類型 – 內建命令 (Built-in commands) – 外部命令 (External commands) 4
  5. 5. 內建命令與外部命令 • 內建命令 (Built-in commands) – 內建在 cmd.exe 直譯器的命令 – 無法變更、更名或用任意程式取代這些命令 – 完整的內建命令清單 • 外部命令 (External commands) – 內建在 Windows 作業系統的獨立執行檔 ( *.exe ) – 執行時有機會可用其他同名的程式取代 Windows 內建的外部命令 – 大部分的外部命令都可以加上 /? 參數取得使用說明 – 完整的外部命令清單 • 更多的外部命令 – Native Win32 ports of some GNU utilities ( 透過 Chocolatey 安裝 )
  6. 6. 關於 Windows 批次檔 • 主要用途 – 在 cmd.exe 命令直譯器的執行環境下執行一個或多個命令 • 可用副檔名 – *.bat – *.cmd • 簡單批次檔範例 ( sample.bat ) @ECHO OFF ECHO Hello World! PAUSE 6
  7. 7. 了解 Windows 批次檔基礎觀念 Windows Batch Scripting Fundamental
  8. 8. 命令直譯器如何運作 • 命令直譯器在解析命令時的邏輯相當精妙且複雜! • 命令直譯器的運作方式 – 預設會在批次檔中逐行解譯命令 – 直接在命令提示字元執行命令與在批次檔中執行命令幾乎完全相同 – 在批次檔中執行每一行命令時,都會自動重新載入批次檔解析該行 – 每一行命令都會產生一個執行結果,並儲存在 ERRORLEVEL 變數中 • 解析命令時主要區分成以下四個部分: – 變數代入 (Variable substitution) – 特殊字元 (Quoting and escaping) – 命令語法 (Syntax) – 訊息轉向 (Redirection) 8
  9. 9. 變數代入 (Variable substitution) • 環境變數 – 內建環境變數 (Windows Environment Variables) – 系統環境變數 (預設套用在所有使用者的執行程序) – 使用者環境變數 (預設套用在目前使用者的執行程序) • 自定義變數 – 可以透過 SET 內建命令來建立自定義變數 – SET foo=bar • 命令直譯器內建變數 – 在命令直譯器環境下預設就會有的變數 • 取得變數有三種格式 (不區分英文大小寫) – %varname% – $0 .. $9 (傳入批次檔的第 n 個參數內容,其中 $0 為批次檔名 ) – $* (傳入批次檔的所有參數內容,以空白間格) 9
  10. 10. 命令直譯器有哪些內建變數 變數名稱 變數值 %CD% 目前路徑 (Current Directory) %TIME% 目前系統時間 ( HH:MM:SS.mm ) %DATE% 目前系統日期 ( 會依據系統地區設定格式來顯示 ) %RANDOM% 自動產生一個 0 到 32767 的亂碼 (數字) %ERRORLEVEL% 取得最近一次執行命令的回傳代碼 ( 0 代表成功 ) %CMDCMDLINE% 取得目前命令直譯器的路徑 10
  11. 11. 在批次檔中使用 % 的注意事項 • 在命令提示字元中 – 可直接執行 ECHO % 輸出一個百分比符號 • 但在執行批次檔時 – 要輸出百分比符號就必須寫成 ECHO %% 才行! • 在批次檔中只要單獨出現一個 % 字元時,都會自動被忽略! 11
  12. 12. 特殊字元 (Quoting and escaping) • 正常來說,大部分的字元都不需要用雙引號括起來 • 需要加上雙引號的特殊字元有 – 空白字元 – &()[]{}^=;!'+,`~ – <>| • 如果不用雙引號就必須使用 ^ 跳脫字元 • 使用範例 – ECHO "Hello <World>" – ECHO Hello ^<World^> – DIR "C:Documents and Settings" (因為有空白字元) – ECHO Johnson ^& son – ECHO A ^^ B 12
  13. 13. 命令語法 (Syntax) • 基本命令組成 – 命令名稱 – 命令參數 – 執行管線 (pipe) + 另一個命令 • 基本命令範例 – dir * | more • 命令名稱:dir • 命令參數:* • 執行管線 + 另一個命令:| more 13
  14. 14. 命令組合語法 • 要在「一行命令」中組合多個命令,可以用以下語法 • & – 左邊的命令執行完畢 (無論成功或失敗),右邊的命令就會立刻執行 – 範例:dir *.txt & dir *.bat • && – 左邊的命令執行成功 (ERRORLEVEL = 0),右邊的命令才會跑 – 範例:dir *.txt && dir *.bat • || – 左邊的命令執行不成功 (ERRORLEVEL != 0),右邊的命令才會跑 – 範例:dir *.txt || dir *.bat 14
  15. 15. 群組命令語法 • 要在「一行命令」中組合多個命令並集中輸入結果,可以用 小括號將命令群組起來,並統一輸出訊息 • ( ) – 範例:(dir *.txt & dir *.bat) > a.txt – 範例:(dir *.txt && dir *.bat && echo Done.) > a.txt – 範例:(dir *.txt & dir *.bat) 15
  16. 16. 如何將一行命令拆解成多行命令 • 批次檔範例 IF 1 EQU 1 ECHO Equal & ECHO Indeed, equal • 利用 ^ 將一行命令拆解成多行命令 (最後還是當成一行執行) @ECHO OFF IF 1 EQU 1 ^ ECHO Equal &^ ECHO Indeed, equal • 利用 () 將一行命令拆解成多行命令 (可讀性較高) (更多範例) @ECHO OFF IF 1 EQU 1 ( ECHO Equal ECHO Indeed, equal ) 16
  17. 17. 訊息轉向 (Redirection) • 標準訊息 IO 區分成三種 – 標準輸入 (standard input) 編號 0 – 標準輸出 (standard output) 編號 1 – 標準錯誤 (standard error) 編號 2 • 基本的訊息轉向語法 < filename 將特定檔案內容轉向到執行程序的標準輸入 > filename 將執行程序的標準輸出轉向到特定檔案 (覆寫檔案) >> filename 將執行程序的標準輸出轉向到特定檔案 (附加內容到檔案) 17
  18. 18. 進階的訊息轉向語法 • 2>NUL – 將應用程式的標準錯誤轉向到 NUL (null device) (隱藏輸出的意思) – dir *.txt 2>NUL • 2> filename – 將應用程式的標準錯誤轉向到檔案 (覆寫檔案) • 2>> filename – 將應用程式的標準錯誤轉向到檔案 (附加內容到檔案) • 2>&1 – 將應用程式的標準錯誤轉向到標準輸入 – dir *.txt >listing.log 2>&1 • (echo Hello & echo World) >myfile.txt – 將兩個命令的標準輸出結果合併後輸出到 myfile.txt 檔案中 18
  19. 19. Windows 批次檔小技巧 Windows Batch Scripting Tips & Tricks
  20. 20. 實作 touch 命令 • C:WindowsSystem32touch.cmd @ECHO OFF IF EXIST %1 ( COPY /B %1+,, %1 >nul ) ELSE ( echo. 2>%1 ) 20
  21. 21. 設定應用程式別名 • C:WindowsSystem32np.cmd @ECHO OFF start notepad %1 21
  22. 22. 深入了解批次檔的語法細節 • 認識 ERRORLEVEL 變數 • 進階字串處理 • 參數處理 • 萬用字元 • 取得使用者輸入 • 認識 %~ 特殊變數 (Percent tilde) • 自訂函式 • 基本數值運算 • 尋找檔案 • 命令提示字元下的快速鍵 • 關於路徑 • 陣列處理 22
  23. 23. 相關連結 • Windows Batch Scripting - Wikibooks, open books for an open world • An A-Z Index of the Windows CMD command line - SS64.com • Batch file - Wikipedia • Batch Script Tutorial • Environment variables / Command shell overview 23
  24. 24. 聯絡資訊 • The Will Will Web 記載著 Will 在網路世界的學習心得與技術分享 – http://blog.miniasp.com/ • Will 保哥的技術交流中心 (臉書粉絲專頁) – http://www.facebook.com/will.fans • Will 保哥的噗浪 – http://www.plurk.com/willh/invite • Will 保哥的推特 – https://twitter.com/Will_Huang

×