• bat脚本学习


    工作需求,写个bat脚本来启动自己的守护进程;bat方面完全空白啊~稍微学习了下,记录下来,后面复习!

    直接上代码:

    示例一:for字符串切割,切割文本中的字符串:

    test.txt 文本内容如下:

     1 ::关闭 echo 打印命令开关,设置为ON则开启
     2 @echo off
     3 
     4 for /f "tokens=1,2,3 delims= " %%a in (test.txt) do (
     5     echo %%a %%b %%c
     6 )
     7 :: pause 命令执行在这里暂停,默认提示 按任意键继续,用来调试使用;可以用 pause>nul 来自定义显示字符
     8 pause
     9 
    10 :: 或者自定义pause 提示字符显示
    11 echo "我是自定义的提示。。。。。"
    12 pause>nul

    解释: for命令比较复杂,这里只学习下了字符串切割;

    •   for语句 字符切割用 delims,后面跟依据什么切割,默认是一行一切割,按 空格 和 tab,所以本例子也可以不写 delims= ;
    •   展示切割后的哪一个字符 由 tokens 来定义,例子中 拿每行 切割后,第 1,2,3 个字段,也就是每一个都拿出来,最后通过 echo 打印出来;
    •   %%a 可以任意定义; %%a,%%b,%%c 可以任意定义,这里把 tokens中切割字符串依次默认保存在 %%a,%%b,%%c 变量中;后面变量不够的  话可以继续自定义,tokens默认会把切割的串依次放进变量;
    •   如果需要细分 每一个变量,可以在do() 中 再写一个for 循环嵌套分割(for循环是可嵌套的),这里不再啰嗦。也可以根据需求,使用多个分隔符来分割字  符串(详细见后面)

    bat文件执行后结果:

      tokens=1,2,3 时 结果:

      tokens= 2,3 时 结果展示:

      

    示例二:for字符串切割,切割 【命令语句 执行结果】的字符串(监视并重启tomcat服务):

      我试了下直接切割命令结果没有成功,我的基本思路是,把执行结果先放在临时文件中,切割后删除:

     1 @echo off
     2 ::查看占用端口的进程信息 : netstat -aon | findstr "端口号"  
     3 ::根据PID查看进程名    :    tasklist | findstr "PID"  
     4 ::杀死进程(这时候就需要使用 /f 参数。)    :    taskkill /pid 5824 /f  
     5 
     6 :: 调用 reStartTomcat_ 函数 ,调用后 按任意键 退出;
     7 call :reStartTomcat_
     8 pause & exit
     9 
    10 :: 定义一个 reStartTomcat_ 名字的函数, 并以 goto :eof 结尾的函数;
    11 :reStartTomcat_
    12 
    13     :: 查找 8080端口的服务,并将找到的结果保存进 tmp.txt临时文件中;
    14     netstat -ano | findstr 8080 >tmp.txt
    15     
    16     :: 我们需要的是 他的 PID号,及第5个切割后的串;我们拿出第1,45 方便判断;tmp数据 见下图
    17     for /f "tokens=1,4,5" %%a in (tmp.txt) do (
    18     
    19         :: bat中字符串默认可以用空格拼接
    20         echo %%a %%b %%c
    21         
    22         :: 判断 如果 %%b="LISTENING" 的话,处于监听状态的话,执行()里面语句
    23         if "%%b"=="LISTENING" (
    24             echo %%c+"服务正在监听,关掉重启。。。。"
    25             :: 强制关闭 该进程
    26             taskkill /pid %%c /f
    27         )        
    28     )
    29     :: 删除生成的临时文件
    30     del tmp.txt
    31     
    32     :: 找到tomcat的bin目录路径
    33     set current_dir="E:/soft/apache-tomcat-7.0.68/bin"
    34     
    35     ::进入到 tomcat的bin路径下;注意不能用 cd;出来上一个工作目录,命令用 popd;
    36     pushd %current_dir%
    37     
    38     rem 输出当前目录 , rem 和 :: 含义一样,都是注释一行
    39     echo "tomcat目录为:"%current_dir%
    40     
    41     :: 启动 tomcat
    42     call startup.bat
    43     pause
    44 goto :eof

     call :reStartTomcat_ :  程序启动入口,可以用if分支语句来控制

      netstat -ano | findstr 8080 >tmp.txt  : 下图是 tmp.txt 保存的信息:  

     结果展示:

     示例三:for字符串切割,切割 【命令语句 执行结果】的字符串(监视并重启tomcat服务):

     1 @echo off
     2 :: 定义一个标签,用来跳转
     3 :Main
     4 
     5 :: 从控制台输入 start/stop ,并保存进 str变量,来控制 下面的分支流程
     6 set /p "str=输入操作类型:[start]/[stop]:"
     7 
     8 :: 如果 str等于 start ,则调用 start函数
     9 if "start"=="%str%" (
    10     :: 调用start_ 函数 并传入 三个参数
    11     call :start_ "q" "2" "e"
    12     pause && exit
    13 )
    14 
    15 :: 如果 str等于 start ,则调用 start函数
    16 if "stop"=="%str%" (
    17     :: 调用start_ 函数 并传入 三个参数
    18     call :stop_ "q" "2" "e"
    19     :: 暂停当前执行,按任意键退出
    20     pause && exit
    21 )
    22 echo "请传入准确的操作类型:[start]/[stop]:"
    23 goto Main
    24 
    25 :start_
    26     echo "服务启动函数!"
    27     :: %0代表 函数名本身, %1,%2,%3 代表的是 第1,2,3 个参数,一次类推
    28     echo %0 "输入的参数 " %1 %2 %3
    29     echo "写入文本中。。。。">tmp.txt
    30     goto :eof
    31     
    32 :stop_
    33     echo "服务关闭函数!"
    34     echo %0 "输入的参数 " %1 %2 %3
    35     goto :eof

     示例四:for字符串切割,定义多个分隔符来切割:

      此处参考资料:http://blog.sina.com.cn/s/blog_4b795cc10100ez8d.html

     1 ::关闭 echo 打印命令开关,设置为ON则开启
     2 @echo off
     3 :: tmp.txt文件见下面截图; 将文本中的内容用delims的3个符号分割,分割后的结果可以用 tokens将分割后的位置的数据取出来,放入 %%a,%%b,%%c,%%d中
     4 for /f "tokens=1,2,3,4 delims=、-." %%a in (tmp.txt) do (
     5     echo %%a %%b %%c %%d
     6 )
     7 :: pause 命令执行在这里暂停,默认提示 按任意键继续,用来调试使用;可以用 pause>nul 来自定义显示字符
     8 pause
     9 
    10 :: 或者自定义pause 提示字符显示
    11 echo "我是自定义的提示。。。。。"
    12 pause>nul

    tmp.txt的文本内容,和tokens=1,2,3,4的结果展示: 如第一行,一次被分割成四段:1 饶天亮 玫瑰爱人 mp3 ;ps:感觉很强大

    当 tokens=1,3和 tokens=2,4时结果展示:由于 %c,%d 没有数据,所以当做字符串直接打印出来了

    本文涉及到的bat的知识点有: 变量,分支,字符串分割(for),函数相关的参数,定义,调用;以及进程的查找,关闭等;

  • 相关阅读:
    软件工程结课作业
    十三次作业
    十二次作业
    十一次作业
    十次作业
    找回感觉的练习
    CSS背景样式和列表样式
    盒子模型案例应用
    display属性
    margin外边距属性
  • 原文地址:https://www.cnblogs.com/happy-rabbit/p/6270566.html
Copyright © 2020-2023  润新知