首页 > 技术文章 > bat 命令集锦(一)

sandyflower 2020-09-17 17:09 原文

一、知识点

(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

 

推荐阅读