通過批處理命令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

 

---------------------------------------------------------------------------------

關注微信公眾號即可在手機上查閱,並可接收更多測試分享~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM