背景
最近在工作中遇到一个bat脚本,对于一个职场菜鸡来说,又碰到了知识盲区,对dos命令一片空白的我还是决定摸一摸这盲区,以便在以后的工作中能更好的运用,难度不大,但是也很实用,花半天时间学习下,同时记下一点学习成果写下来方便自己的同时也能方便大家。
脚本内容
先上一段脚本,这是一段打包的脚本,主要是涉及一些基本操作
::解压程序WinRAR.exe所在目录 32位%ProgramFiles(x86)% 或64位 %ProgramFiles%
set WinRarDir=%ProgramFiles%\WinRAR
::全量包名
set targetFile=linux.zip
set curdir=%~dp0
::检查基础文件
if exist %curdir%%targetFile% (echo 存在:%targetFile%) else (echo %targetFile%文件不存在 & pause&exit)
mkdir tmpSee
::解压并放到临时目录
if exist "%WinRarDir%\WinRAR.exe" (echo 已找到:"%WinRarDir%\WinRAR.exe") else (echo 找不到:"%WinRarDir%\WinRAR.exe"请检查。 & pause&exit)
echo --开始解压全量包资源...
start /wait "" "%WinRarDir%\WinRAR.exe" x -l -ibck %curdir%%targetFile% %curdir%\tmpSee\
echo --解压完毕
echo --开始处理文件...
::删除多余目录
cd %curdir%\tmpSee\see
rd /s /q mysql
rd /s /q guacd
rd /s /q dbclient
::处理tomcat文件
xcopy tomcat\webapps %curdir%\tmpSee\see\webapps /s /e /k /i /q
rd /s /q %curdir%\tmpSee\see\webapps\ROOT
del /s /q %curdir%\tmpSee\see\webapps\cas.war
rd /s /q %curdir%\tmpSee\see\tomcat
xcopy %curdir%\tmpSee\see\webapps %curdir%\tmpSee\see\tomcat\webapps /s /e /k /i /q
rd /s /q %curdir%\tmpSee\see\webapps
del /s /q %curdir%\tmpSee\see\.jre.zip
echo --文件处理完毕
echo --开始压缩文件...
cd %curdir%\tmpSee
start /wait "" "%WinRarDir%\WinRAR.exe" a -r -s -ibck %curdir%\patch.zip see
echo --压缩完毕
cd %curdir%
rd /s /q %curdir%\tmpSee
echo --构建升级包完毕
pause & exit
具体命令讲解
1、echo:显示信息
2、echo on/off:开/关回显功能,关闭后对应命令跟盘符信息都不会再显示
3、输出信息至文件,
echo 文件内容 > 文件 将内容写入到文件中 其中type是显示文件内容
echo 文件内容 >> 文件 将内容追加到文件中,作用跟linux一致
4、算术运算,set /p 是命令语法 var是变量名 =号右边的"请输入变量的值: ",这个是提示语,不是变,windows下引用变量用的是%%,linux中是$
5、type:查看文件内容;more:分段查看文件内容,more +100 abc.txt,从第100行开始查看abc.txt文件内容
6、多命令运算,&&,具有短路,第一个命令错误后不会执行接下去的命令,||,或命令,短路效果,第一个命令成功后面的不再执行
7、管道符号,作用类比于linux中的管道符
8、REM 是DOS批处理和VB的注释语句,直接在rem后面加上注释语句即可,::双冒号也有一样的效果
9、dir命令,操作目录
10、rd、del,del用来删除文件,而rd用来删除文件夹,可以添加参数/S /Q,表示递归删除文件,以及静态删除文件。
11、move命令用于移动文件、改目录名,具体用法类似于linux中的mv,MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2
12、if-else结构,具体用法如if exist %curdir%%targetFile% (echo 存在:%targetFile%) else (echo %targetFile%文件不存在 & pause&exit),exist判断文件是否存在,也可以判断字符串等
13、循环结构
1、for /d in (路径/*) do 具体操作,for的不同参数表明不同的作用d,/d表示遍历文件夹,实例如:for /d %%a in (*) do if %%a==22222 (rd /s /q %%a && echo delete successful)
2、for /r in (路径/*) do 具体操作,遍历目录及其子目录下的文件,实例如:for /r %%a in (*) do (echo %%a)