批處理指令碼的細節

2021-06-09 13:11:18 字數 1861 閱讀 5094

寫jenkins在windows下vs專案的自動化編譯的批處理指令碼的時候,在一些細節處理方法遇到過很多問題,雖然網上關於批處理有很多的教程,但是對於一些指令講解還是不夠詳細,這些小問題往往會困擾你比較長的時間,這裡分享一下我在寫指令碼時遇到的一些小問題,希望能夠幫助到大家。

1.錯誤處理乙個好的指令碼一定要具有一定的錯誤處理機制,因為指令碼的執行雖然快速,但同樣帶來了一定的破壞性,有時候到另一台機器時,你往往很難控制指令碼的執行過程,所以保險一點的作法就是你對指令執行的前提條件進行檢驗,你可以使用if not exist等類似的指令進行檢測,例如

if not exist "%gitbin%" echo couldn't find gitbin at "%gitbin%" and you should set like this "f:\git\bin"& pause & exit 2
這條指令就是對環境變數gitbin進行檢查,如果不存在這個環境變數,指令碼就退出執行,並且將exit後相應的值寫入errorlevel,你可以根據errorlevel的值進行後續的處理,例如
if %errorlevel% neq 0 goto error
2.環境變數的使用

當指令碼需要處理路徑並不是唯一的時候,比如說,jdk的安裝路徑因人而異,為了增強指令碼的通用性,比較方便的做法就是讓使用者將需要配置的路徑寫入環境變數,然後再指令碼中直接使用環境變數來進行操作,當然自己也可以在指令碼中寫入臨時的環境變數。

set _projectname=testcpp

cd samples\%_projectname%\proj.android

這兩行命令會根據臨時寫入環境變數中的目錄名testcpp進入到相應的目錄。當你要直接進入自己設定的環境變數對應的目錄時,需要先獲取環境變數的路徑值的前兩個字元,也就是對應的碟符,進入相應的磁碟下,如何才能直接用cd命令進入相應的目錄。如果想要獲取當前路徑,直接echo %cd%。

3.呼叫其他指令碼怎麼說呢,這裡不是主要講說呼叫其他指令碼,很多時候可能會在指令碼中呼叫其他的指令碼,如果你直接在指令碼中輸入指令碼的名稱,很有可能執行完那個指令碼後無法從中退出,或者說你想在另乙個控制台中執行乙個編譯命令,你可以用一行命令使用管道完成這樣乙個任務,但是很有可能你不能從中退出,這個時候你不妨試試不直接寫指令碼的名稱,用call命令來進行呼叫,也許你就能使你的指令碼繼續執行下去。

這行指令將乙個命令傳入到cygwin的shell控制台來完成乙個shell指令碼的執行,執行完成後退出shell控制台,繼續執行我們的指令碼,如果不適用call指令,你的批處理很可能一直停留在shell控制台。

4.拷貝資料夾很多時候你不僅僅是需要拷貝單個檔案這麼簡單,你需要把整個資料夾內的東西都拷貝到另乙個資料夾下,這時候你就需要xcopy命令

cd debug.win32

xcopy /e /y /q "%cc_test_res%" ..

這兩行命令的作用是將環境變數cc_test_res對於的資料夾下所有檔案包括子資料夾都拷貝到debug.win32目錄下,不要忘記後面的乙個點。

5.習慣性地寫上注釋時間總是無情的,當你很久以後再看你以前寫的指令碼,很有可能你會一時間看不懂你寫的指令碼,特別是當你寫了很多的指令碼以後,這時候注釋就能給你提供很大的幫助,使你能快速記起指令碼的作用和一些指令的意義,良好的注釋同樣會給別人閱讀你的指令碼提供很大的幫助,所以無論你的注釋寫的有多差都要對你的指令碼新增注釋。

批處理指令碼的細節2023年

寫jenkins在windows下vs專案的自動化編譯的批處理指令碼的時候,在一些細節處理方法遇到過很多問題,雖然網上關於批處理有很多的教程,但是對於一些指令講解還是不夠詳細,這些小問題往往會困擾你比較長的時間,這裡分享一下我在寫指令碼時遇到的一些小問題,希望能夠幫助到大家。1.錯誤處理乙個好的指令...

IncrediBuild 批處理指令碼

個人認為,自動化指令碼是提高程式設計師生活質量的重要工具之一。在本貼記錄下incredibuild的命令列呼叫 prj 要編譯什麼工程,工程名用逗號隔開,支援 和?萬用字元 build 就是編譯 rebuild 就是clean build openmonitor 會把編譯過程視窗開啟 cfg 編譯條...

批處理指令碼 基礎

批處理是windows下的一種指令碼 後面統稱批處理指令碼 一般就是字尾為.bat或者.cmd的檔案。雙擊該檔案,或者在命令列中輸入該檔名 注意絕對路徑和相對路徑 就可以逐行執行其中的內容。批處理指令碼由windows下面的cmd.exe程式來處理,可以通過如下的方式來開啟乙個cmd.exe,它表現...