前兩天有這么個小需求:
在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
---------------------------------------------------------------------------------
關注微信公眾號即可在手機上查閱,並可接收更多測試分享~