今天有一个简单的需求,从git上clone下来程序包,然后有的文件还需要解压,在Windows下,想着用bat程序就可以解决,bat
是适合解决一些程序的自动化处理的,类似于Linux中的shell
脚本,在解决过程中遇到几个问题记录一下:
文章目录
bat基本结构
首先,我这个bat自动化脚本不需要和用户交互,所以关闭回显:@echo off
rd是删除目录,del是删除文件,这里我要确认当前目录下这个文件夹不存在,存在的话就给他删掉,所以用rd /s /q D:\xxx
程序的最后,如果写的是exit
的话执行完后会自动退出窗口,如果写的是pause
,会等待你输入一个任意按键。
如:
::------------------------------
::注释
::------------------------------
@echo off
rd /s /q D:\xxx
::echo success
exit
::pause
调用git
首先,需要安装好git软件。
然后,在bat程序里设置好环境变量,也就是说,要让命令行知道我可以去哪里调用git这个命令,找到git的安装目录,然后添加:set GIT_HOME=D:\Program Files\Git\bin
然后就使用git clone xxx
这个命令了。
如:
set GIT2_HOME=D:\Program Files\Git\bin
cd /d D:\
git clone https://gitcode.net/xxx/xxx.git
调用Bandizip
如果有zip压缩文件,怎么用bat脚本自动解压呢。
首先还是要定义环境变量:set ZIP_HOME=C:\Program Files\Bandizip
,让cmd能找到命令。
然后解压:Bandizip.exe x photo.zip
解压完之后,会保留解压完成的窗口,如果不关掉它后面的程序无法执行,刚开始我是用串行处理,发现不行,然后准备新开一个窗口,去关掉bandizip这个进程:
::Bandizip.exe x photo.zip
::sleep 3
::new window /k /c
::start "" cmd /k sleep 5 && taskkill /f /im Bandizip.exe
新开窗口也是串行处理,所以处理这种情况就需要进行并行处理,并行处理时,一般是先定义cmd需要执行哪些命令,然后start开启一个线程,算是多线程处理吧。
如:
set cmd1=Bandizip.exe x photo.zip D:\qycl_exam\photo
set cmd2=taskkill /f /im Bandizip.exe
start %cmd1%
sleep 3
start %cmd2%
这样就基本实现了想要的功能,脚本如下:
@echo off
set GIT1_HOME=C:\Program Files\Git\bin
set ZIP1_HOME=C:\Program Files\Bandizip
rd /s /q D:\qycl_exam
cd /d D:\
git clone https://gitcode.net/xxx/xxx.git
cd /d xxx
::Bandizip.exe x photo.zip
::sleep 3
::new window /k /c
::start "" cmd /k sleep 5 && taskkill /f /im Bandizip.exe
set cmd1=Bandizip.exe x photo.zip D:\xxx\photo
set cmd2=taskkill /f /im Bandizip.exe
start %cmd1%
sleep 3
start %cmd2%
echo success
exit
::pause
以上。