有人大致说过这样的话:如果有一件工作你每天都做,而且每天在这件事是耗时超过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行的批处理,我居然断断续续用了三天,打脸!