一、知识点
(1) 切换目录
cd /d "目标目录"
如:cd /d "E:/logs"
(2) 获取当前脚本所在全路径
%~dp0
如: cd /d %~dp0 表示切换到当前执行脚本所在路径
(3) 设置变量值
set 变量=xxx
如: set SH_DIR=%~dp0 表示将当前执行脚本所在路径赋值给 SH_DIR变量
(4) 使用变量值
%变量%
如: echo %SH_DIR% 表示打印 变量 SH_DIR 中的值
(5) findstr
表示对数据进行筛选,查找符合条件的数据
如:netstat -ano|findstr 8082 表示查找占用8082的进程
(6) 获取当前目录
%cd%
如:set ROOT_DIR=%cd% 表示将当前目录路径赋值给 ROOT_DIR
(7) for 循环遍历
在 cmd 窗口中:for %i in (command1) do command2
在批处理文件中:for %%i in (command1) do command2
说明:
a) command1 表示的字符串或变量可以是一个或多个,当时多个的时候,每个元素之间用 空格键、跳格键、逗号、分号或等号隔开;
如: for %%i in (A,B,C) do echo %%i
输出结果为:
A
B
C
b) 搜索当前目录下有哪些文件
for %%i in (*.*) do echo %%i
c) 搜索当前目录下所有的文本文件
for %%i in (*.txt) do echo "%%i"
d) 解析某个文件中的全部行
for /f %%i in (%filepath%) do echo %%i 输出文件中的所有行,这里 使用了 /f 表示解析每行内容
e) tokens、delims 表示对每行的数据按照 delims 指定的分隔符进行分割,获取tokens 指定的列
for /f "delims=、" %%i in (%filepath%) do echo %%i 表示遍历 filepath 文件中的每行,使用 "、" 对每行数据进行分割,默认提取第一列,则 echo %%i 表示打印每行第一列的内容
for /f "tokens=5 delims=、-." %%i in (%filepath%) do echo %%i 表示遍历 filepath 文件中的每行,使用 "、-." 对每行数据进行分割,提取第五列,则 echo %%i 表示打印每行第五列的内容
参考:https://blog.csdn.net/u013514928/article/details/79629937/
https://blog.csdn.net/chinajobs/article/details/52798681
(8) if 用法
格式:
if condition (
多条语句
) else (
多条语句
)
注意:这里的( ) 连个括号必须前后有空格,要不然不能成功执行
a) if not condition 如:if not "%pid%"=="" 表示pid值不为空时为 true
b) if condition 如:if "%pid%"=="" 表示pid的值为空时为 true
c) if exist 文件或目录 如:if exist %filepath% 表示 文件存在为 true
d) if not exist 文件或目录 如:if not exist %filepath% 表示文件不存在为 true
e) 数值比较
int1 equ int2 判断2个数值是否相等,相等为 true
int1 gtr int2 判断 int1 是否大于 int2 ,当 int1 大于 int2 时为 true
int1 geq int2 判断 int1 是否大于或等于 int2, 当 int1 大于或等于 int2 时为 true
int1 leq int2 判断 int1 是否小于或等于 int2, 当 int1 小于或等于 int2 时为 true
int1 neq int2 判断 int1 是否不等于 int2, 当 int1 不等于 int2 时为 true
(9) 后台执行脚本
start /b xxx.bat 后台执行脚本
start /b java -jar xxx.jar 后台执行 jar 程序
(10) 获取前一条语句执行结果
%errorlevel%
如: echo %errorlevel%
(11) 创建目录/文件
mkdir xxx 或 md xxx
(12) 强杀进程
taskkill /pid %pid% -F
二、实操
(1) 后台启动 java 程序
cd /d %~dp0 set SH_DIR=%~dp0 cd ../ set ROOT_DIR=%cd% echo %ROOT_DIR% echo %SH_DIR% set LOG_DIR=%ROOT_DIR%log if not exist %LOG_DIR% ( md %LOG_DIR% ) start /b java -jar %ROOT_DIR%/consul-consumer.jar >> %LOG_DIR%/start.log set result=%errorlevel% echo result=%result% exit %result%
(2) 对使用 findstr 查询到的多行结果进行逐行处理
for /F "tokens=5 delims= " %%i in ('netstat -ano ^|findstr 8082^|findstr LISTENING') do set pid=%%i