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行的批處理,我居然斷斷續續用了三天,打臉!