bat脚本学习
工作需求,写个bat脚本来启动自己的守护进程;bat方面完全空白啊~稍微学习了下,记录下来,后面复习!
直接上代码:
示例一:for字符串切割,切割文本中的字符串:
test.txt 文本内容如下:
::关闭 echo 打印命令开关,设置为ON则开启
@echo off for /f "tokens=1,2,3 delims= " %%a in (test.txt) do (
echo %%a %%b %%c
)
:: pause 命令执行在这里暂停,默认提示 按任意键继续,用来调试使用;可以用 pause>nul 来自定义显示字符
pause :: 或者自定义pause 提示字符显示
echo "我是自定义的提示。。。。。"
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服务):
我试了下直接切割命令结果没有成功,我的基本思路是,把执行结果先放在临时文件中,切割后删除:
@echo off
::查看占用端口的进程信息 : netstat -aon | findstr "端口号"
::根据PID查看进程名 : tasklist | findstr "PID"
::杀死进程(这时候就需要使用 /f 参数。) : taskkill /pid /f :: 调用 reStartTomcat_ 函数 ,调用后 按任意键 退出;
call :reStartTomcat_
pause & exit :: 定义一个 reStartTomcat_ 名字的函数, 并以 goto :eof 结尾的函数;
:reStartTomcat_ :: 查找 8080端口的服务,并将找到的结果保存进 tmp.txt临时文件中;
netstat -ano | findstr >tmp.txt :: 我们需要的是 他的 PID号,及第5个切割后的串;我们拿出第1, , 方便判断;tmp数据 见下图
for /f "tokens=1,4,5" %%a in (tmp.txt) do ( :: bat中字符串默认可以用空格拼接
echo %%a %%b %%c :: 判断 如果 %%b="LISTENING" 的话,处于监听状态的话,执行()里面语句
if "%%b"=="LISTENING" (
echo %%c+"服务正在监听,关掉重启。。。。"
:: 强制关闭 该进程
taskkill /pid %%c /f
)
)
:: 删除生成的临时文件
del tmp.txt :: 找到tomcat的bin目录路径
set current_dir="E:/soft/apache-tomcat-7.0.68/bin" ::进入到 tomcat的bin路径下;注意不能用 cd;出来上一个工作目录,命令用 popd;
pushd %current_dir% rem 输出当前目录 , rem 和 :: 含义一样,都是注释一行
echo "tomcat目录为:"%current_dir% :: 启动 tomcat
call startup.bat
pause
goto :eof
call :reStartTomcat_ : 程序启动入口,可以用if分支语句来控制
netstat -ano | findstr 8080 >tmp.txt : 下图是 tmp.txt 保存的信息:
结果展示:
示例三:for字符串切割,切割 【命令语句 执行结果】的字符串(监视并重启tomcat服务):
@echo off
:: 定义一个标签,用来跳转
:Main :: 从控制台输入 start/stop ,并保存进 str变量,来控制 下面的分支流程
set /p "str=输入操作类型:[start]/[stop]:" :: 如果 str等于 start ,则调用 start函数
if "start"=="%str%" (
:: 调用start_ 函数 并传入 三个参数
call :start_ "q" "" "e"
pause && exit
) :: 如果 str等于 start ,则调用 start函数
if "stop"=="%str%" (
:: 调用start_ 函数 并传入 三个参数
call :stop_ "q" "" "e"
:: 暂停当前执行,按任意键退出
pause && exit
)
echo "请传入准确的操作类型:[start]/[stop]:"
goto Main :start_
echo "服务启动函数!"
:: %0代表 函数名本身, %,%,% 代表的是 第1,, 个参数,一次类推
echo % "输入的参数 " % % %
echo "写入文本中。。。。">tmp.txt
goto :eof :stop_
echo "服务关闭函数!"
echo % "输入的参数 " % % %
goto :eof
示例四:for字符串切割,定义多个分隔符来切割:
此处参考资料:http://blog.sina.com.cn/s/blog_4b795cc10100ez8d.html
::关闭 echo 打印命令开关,设置为ON则开启
@echo off
:: tmp.txt文件见下面截图; 将文本中的内容用delims的3个符号分割,分割后的结果可以用 tokens将分割后的位置的数据取出来,放入 %%a,%%b,%%c,%%d中
for /f "tokens=1,2,3,4 delims=、-." %%a in (tmp.txt) do (
echo %%a %%b %%c %%d
)
:: pause 命令执行在这里暂停,默认提示 按任意键继续,用来调试使用;可以用 pause>nul 来自定义显示字符
pause :: 或者自定义pause 提示字符显示
echo "我是自定义的提示。。。。。"
pause>nul
tmp.txt的文本内容,和tokens=1,2,3,4的结果展示: 如第一行,一次被分割成四段:1 饶天亮 玫瑰爱人 mp3 ;ps:感觉很强大
当 tokens=1,3和 tokens=2,4时结果展示:由于 %c,%d 没有数据,所以当做字符串直接打印出来了
本文涉及到的bat的知识点有: 变量,分支,字符串分割(for),函数相关的参数,定义,调用;以及进程的查找,关闭等;
bat脚本学习的更多相关文章
- Bat 脚本学习 (基础篇)
[转]Bat 脚本学习 2015-01-05 14:13 115人阅读 评论(0) 收藏 举报 基础部分: ============================================== ...
- Windows bat脚本学习(1)
基础 首先所有命令在cmd命令行中都能找到说明: 例如 想知道type用法 输入type /? 其他命令都一样 type [drive:][path] filename 显示文本文件内容 虽然有点鸡肋 ...
- 批处理bat脚本编写(附详细例子)
批处理bat脚本编写(附详细例子) 由于在项目开发的过程中经常需要编写bat脚本,而看大牛们编写 ...
- bat脚本参数 if goto choice for使用的学习笔记。
写过几次bat脚本,但一直没有总结,最近找到一个网页介绍bat,总结得很好,转自 http://www.jb51.net/article/49627.htm: 本文只总结我不会的,全面的看原网页就可以 ...
- Window脚本学习笔记之BAT调用设置
用一句bat脚本调用window的系统设置: rem 调用回收站 explorer.exe ::{645FF040-5081-101B-9F08-00AA002F954E} rem 检查Windows ...
- 今天我自己第一次写了一个Windows批处理bat脚本,一起学习一下吧。
今天我自己第一次写了一个Windows批处理bat脚本,备注一下 事情原由:自己使用Java开发了一个加解密的工具.但是当把工具给别人使用的时候,别人还需要把代码编译打包, 然后还需要看一下代码里面的 ...
- 【工作笔记】BAT批处理学习笔记与示例
BAT批处理学习笔记 一.批注里定义:批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD,这些命令统称批处理命令. 二.常见的批处理指令: 命令清单: 1.RE ...
- penghui_031413 Bat命令学习
penghui_031413 Bat命令学习 基础部分:====================================================================== ...
- windows bat脚本编写
windows批处理 (cmd/bat) 编程详解 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建.编辑和查看.两者所用的命令行代码 ...
随机推荐
- Plan : 破晓
题记 : 不要因为走的太远而忘记自己为什么而出发. 1. 白书(算法竞赛入门经典)看完(每一句话都要读懂) 2. 每次听完课把当天内容复习完(自习室10点以后复习) 3. 微机实验要提前预习(把实验报 ...
- HBase的索引
LSM树由来.设计思想以及应用到HBase的索引 讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来: 哈希存储引擎 是哈希表的持久化实现,支持增.删.改以及随机读取操作,但 ...
- 代码高亮插件推荐——SyntaxHighlighter++
SyntaxHighlighter++这个插件的最大的优点就是可以在编辑器的下方有一个输入框,里面可以输入代码,然后插入到文章中.就不用编辑文章的时候,在可视化和文本之间来回切换了.非常适合不熟悉ht ...
- StreamWriter(ms, new UTF8Encoding(false))可以达到不输出BOM的需求。
winform 通过webservice向服务器提交图片需要注意的地方 最近一个winform项目中需要通过拍照或者上传本地文件或者截图的方式把产品图片上传到服务器,最后选择了服务器部署webserv ...
- Devexpress XtraReports 交叉报表
[原创]Devexpress XtraReports 系列 5 创建交叉报表 昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表 ...
- LESS编译方案
我的LESS编译方案 2013-08-07 10:22 by 逆风之羽, 469 阅读, 2 评论, 收藏, 编辑 背景 近期项目前端决定使用less,简单介绍一下,详细信息有兴趣查看官方文档(htt ...
- DataSet、DataTable、DataRow 复制
DataSet.DataTable.DataRow 复制 DataSet 对象是支持 ADO.NET的断开式.分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个Da ...
- 大数据应用日志采集之Scribe演示实例完全解析
大数据应用日志采集之Scribe演示实例完全解析 引子: Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用.它能够从各种日志源上收集日志,存储到一个中央存储系 ...
- 转义字符(\)对JavaScript中JSON.parse的影响
Email:longsu2010 at yeah dot net 按照ECMA262第五版中的解释,JSON是一个提供了stringify和parse方法的内置对象,前者用于将js对象转化为符合jso ...
- 【stanford C++】字符串(String)与流(Stream)
字符串(String)与流(Stream) 一.C++中字符串(String) 字符串(String):就是(可能是空的)字符序列. C++中的字符串在概念上和Java中的字符串类似. C++字符串用 ...