通過批處理命令for提取資料

2022-02-08 06:28:10 字數 3415 閱讀 3324

前兩天有這麼個小需求:

在cmd中執行某測試工具後,會返回乙個json結果,其中有乙個引數的值每次都變且經常要用,正常情況複製貼上就好了,但這個值非常長,配上cmd的標記+貼上的行為,就很酸爽了。然後就想快速提取這個值,順著cmd的這個思路,就走上了批處理的道路。

借這個機會,簡單跟大家交流交流怎麼通過批處理命令獲取資料的內容。

案例中的幾個元素:

cmd中用的測試工具:test_tool.exe

返回的json資料(示例):

。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列開始之後所有的內容(包含分隔符)

DOS下通過批處理執行sql命令

通過批處理執行sql命令 1.restore.bat 檔案內容 osql e s ic tempdb restore.txt 2.restore.txt 檔案內容 use master if exists select from sysdevices where name truckdb exec ...

批處理命令

time 2019 07 05 author ruo xiao 1 var 告訴編譯器,var 是變數,不是字串。2 var,僅用在 for 迴圈中。栗子 echo off set vars jack lucy nasa for t in vars do echo t pause 執行結果 注意 1...

通過dos批處理命令,實現系統環境切換

dos mysql 應用系統可以根據資料庫配置引數,決定當前模式是正式環境還是測試環境 因應用服務前台未提供配置功能,每次切換時,需要使用mysql工具連線資料庫,然後修改資料庫配置。由於需要頻繁切換正式與測試環境,通過mysql工具修改資料庫配置引數較為繁瑣 本文講解如何使用dos批處理命令,實現...