VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > 批处理教程 >
  • 通过批处理命令for提取数据

前两天有这么个小需求:

在cmd中运行某测试工具后,会返回一个json结果,其中有一个参数的值每次都变且经常要用,正常情况复制粘贴就好了,但这个值非常长,配上cmd的标记+粘贴的行为,就很酸爽了。然后就想快速提取这个值,顺着cmd的这个思路,就走上了批处理的道路。

借这个机会,简单跟大家交流交流怎么通过批处理命令获取数据的内容。

 

案例中的几个元素:

cmd中用的测试工具:test_tool.exe

返回的json数据(示例):

{"random_id":"wojiushigechaochangdesuijizifuchuan…wojiushigechaochangdesuijizifuchuan…wojiushigechaochangdesuijizifuchuan…wojiushigechaochangdesuijizifuchuan…qishiwobizhegehaichang","begin_time":"2018-12-29","end_time":" 2018-12-30"}。random_id的值,就是我们要获取的内容。

 

咱们先来看看这简单的几行脚本:(真的很简单)

 

简单解释一下:

第2行:运行测试工具test_tool.exe,然后将数据保存到(清空已有内容的方式)系统临时目录(%temp%)的data.json中

第4行:将data.json中的数据按照“:”和“,”分列,取第二列的数据。结果如何呢?如下图:

 

第5行:去掉了上面结果中的双引号,然后将数据保存到(清空已有内容的方式)系统临时目录(%temp%)的key.txt中

第6行:打开key.txt,你就可以看到纯净版的key。好,到此为止,成功的跳过了cmd苦逼的标记+粘贴。

第7行:嗯…其实要它没用。

 

简单介绍一下这里面核心的“for /f”的这个批处理命令。“for /f”常用来解析文件,读取字符串。

通过其中的tokens和delims两个选项,能够获取一段字符串中的特定内容,delims负责切分字符串,tokens负责提取内容。

 

举例说明:

把下面的内容存个txt文件,如:“四大名著.txt”(注意保存为utf-8编码格式)

1.《三国演义》-罗贯中-明

2.《红楼梦》-曹雪芹-清

3.《水浒传》-施耐庵-明

4.《西游记》-吴承恩-明

输入不带tokens和delims的命令语句,

咱们来看看delims的作用

delims:用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键,同时支持定义多个分隔符。

先来看单个的:

新增”delims=.”,结果是按照“.”分隔,然后取前面的内容。

  

再看定义多个的:

改为"delims=.《-",结果按照“.”,“《”,“-”分成多列,然后取第一列的内容。

  

注:具体效果得结合tokens的应用来看

 

咱们再来看看token的作用

tokens:配合delims使用,用来告诉for应该获取哪列的数据,同时支持获取多列的数据。

先来看单个的:

改为"tokens=2 delims=.",结果是按照“.”分隔,然后取第二列(也就是后面)的内容。

(由于按照“.”分隔只有两列,那么tokens大于2获取的数据就没有内容了)

 

再来看个复杂点的:

改为"tokens=2 delims=.《》-",结果按照“.”,“《”,“》”,“-”分成多列,然后取第二列的内容。

 

获取多列的数据:

按照“.”,“《”,“》”,“-”分列后,一共有4列,全部分别获取每一列的数据。

 

另外,tokens也可以支持一些其他用法,比如通配符:

按照“.”,“《”,“》”,“-”分列后,一共有4列,获取第1列、第2列的数据,然后“*”表示获取从第3列开始之后所有的内容(包含分隔符)

 

转自https://mp.weixin.qq.com/s/PZiAgFHlq0kq-tl1e7KmeA


相关教程