1. 程式人生 > >Window批處理自動打包升級包

Window批處理自動打包升級包

 有人大致說過這樣的話:如果有一件工作你每天都做,而且每天在這件事是耗時超過90S,那麼你就需要讓機器來做了。

         我最近幾個月每天都會給別人打升級包,從不同的地方獲取10個不同的檔案,這些破檔案來自不同的人。打包時需要把檔案放到不同的目錄下或者不同的壓縮包中。由於我們的裝置是QNX裝置,其壓縮包採用的是tar.gz的壓縮格式,而我安裝的壓縮軟體HaoZip不支援直接將檔案拖拽入.tar.gz包中,需要解壓、壓縮。每天耗時絕對超過10分鐘,於是就不得不搞一搞DOS批處理,以前是懶的寫(可能內心覺得自己做不好),寫完才知道,原來批處理才是最好的偷懶啊。

以下是本次的主要知識點:

知識點:

獲取當前指令碼的路徑:

setcurrent_path=%cd%

列印變數值(引用變數值)

echo%current_path%

從控制帶獲取變數值

SET/P variable=[promptString]  

eg:

set/p project_name=Input project name, such as XXXX:

if語句(注意空格)

a.判斷字串是否為空

eg:

if"%project_name%"=="" (

echo#####error:Project name is NULL && goto error_Delete_Output

)

b.判斷檔案是否存在,連字元&&:

eg:

ifnot exist  %MCU_DIRECTORY% ( echo%MCU_DIRECTORY% not exist ! && goto error_Exit)

刪除資料夾(資料夾中亦有資料夾)

echoy|DEL %OUT_DIRECTORY%\*.* && echo y|RD /S %OUT_DIRECTORY%

判斷資料夾是否為空:

dir/a /b %current_path%\%MCU_DIRECTORY%|findstr .* >nul||echo Warning:input_MCUdirectory is empty && goto error_Exit

XCOPY,將指定目錄連檔案和目錄結構一起拷貝(/E:複製目錄和子目錄,包括空的;/Y:直接覆蓋):

XCOPY/E /Y .\%OS_DIRECTORY%\* .\%OUT_DIRECTORY%\ && echo copy os packet over

copy單個檔案(注意路徑中的斜線):

copy%MPU_DIRECTORY%\base_packet\base.tar.gz%OUT_DIRECTORY%\update\packets\base.tar.gz && echo copy base packetover

.tar.gz檔案解壓(HaoZip-好壓)

rem 設定壓縮軟體路徑

setcompression_software=D:\Program Files\2345Soft\HaoZip\

rem 切換到壓縮軟體路徑

cd/d %compression_software%

rem 將base.tar.gz解壓輸出到%current_path%\output\update\packets\

HaoZipCx %current_path%\output\update\packets\base.tar.gz-o%current_path%\output\update\packets\

.tar.gz檔案的壓縮

rem 切換到壓縮軟體路徑

cd/d %compression_software%

rem 將%current_path%\output\update\packets\*所有內容打包為一個tar包

HaoZipCa -ttar %current_path%\output\update\packets\%project_name%.tar      %current_path%\output\update\packets\*

HaoZipCa -tgzip %current_path%\output\update\packets\%project_name%.tar.gz  %current_path%\output\update\packets\%project_name%.tar

PS:

最近越發覺得自己的水平接近於一位同齡同事五年前(此子大三)的水平:”不滯於物,草木竹石均可為劍。自此精修,漸進於無劍勝有劍之境“。當然自己現在還滯於各種物,但終覺其有跡可循,許是錯覺吧,哈哈。

嗯,短短100行的批處理,我居然斷斷續續用了三天,打臉!