[BAT腳本] 一、BAT腳本FOR循環操做文件和命令返回實例

Wednesday, 31. October 2018 08:18PM - beautifulzzzzjson


1、需求

須要在windows上實現一個bat腳本解析json,將json轉換爲本身想要的key-value樣式,來壓縮複雜json。windows

此外爲了保證腳本的靈活性,我在json中添加一個bat節點,用於指明須要抽取該json中的哪些節點進行壓縮( 1>某些節點信息沒有用,所以不用提取;2>節點所對應的key太長了,所以能夠用新的key替代老的key來壓縮)

函數

2、json例子

json例子以下 a.jsoncode

{
    "light": {
        "bat": {
            "value": [
                "/.light.category.value/category/",
                "/.light.dmod.value/dmod/",
                "/.light.color.r.pin.value/rpin/",
                "/.light.color.r.lv.value/rlv/",
                "/.light.color.g.pin.value/gpin/",
                "/.light.color.g.lv.value/glv/",
                "/.light.color.b.pin.value/bpin/",
                "/.light.color.b.lv.value/blv/",
                "/.light.color.cct_l.pin.value/cct_lpin/",
                "/.light.color.cct_l.lv.value/cct_llv/",
                "/.light.color.cct_wc.pin.value/cct_wcpin/",
                "/.light.color.cct_wc.lv.value/cct_wclv/",
                "/.light.other_lamp.min_lum.value/min_lum/",
                "/.light.other_lamp.pwmhz.value/pwmhz/"]
        },
        "cmod": {
            "value": "rgbwc"
        },
        "dmod": {
            "value": "pwm"
        },
        "color": {
            "cct_l": {
                "pin": {
                    "value": 6
                },
                "lv": {
                    "value": true
                }
            },
            "r": {
                "pin": {
                    "value": 7
                },
                "lv": {
                    "value": true
                }
            },
            "b": {
                "pin": {
                    "value": 4
                },
                "lv": {
                    "value": true
                }
            },
            "g": {
                "pin": {
                    "value": 3
                },
                "lv": {
                    "value": true
                }
            },
            "cct_wc": {
                "pin": {
                    "value": 5
                },
                "lv": {
                    "value": true
                }
            }
        },
        "other_lamp": {
            "min_lum": {
                "value": 10
            },
            "pwmhz": {
                "value": 8000
            }
        },
        "ickind": {
            "value": "tlsr8266"
        },
        "category": {
            "value": "0501"
        }
    }
}


3、bat腳本

解析腳本爲 a.batblog

該腳本首先從a.json中讀取bat的值:
1)這裏不直接用.light.bat.value的緣由是:light關鍵詞多是其餘值,所以須要採用特殊的寫法進行模糊匹配;token

2)這裏使用bat的FOR的用法,比較複雜,其中:delims=/ tokens=2,3的意思是每次執行jq-win64.exe...的命令返回的每一行,經過/分割爲多列,取其中的第二、3列賦值給%%I和%%J;ip

3)mzip是讀取文件的多行,並輸出一行字符串;字符串

@echo off
setlocal enabledelayedexpansion

set out_file=config.bin

echo {> %out_file%

for /F "delims=/ tokens=2,3" %%I in ('jq-win64.exe ".[] | .bat.value[]" a.json') do (
    echo %%I
    echo %%J
    call:fjq %%I %%J
)

echo }>> %out_file%

cat %out_file%
call:mzip
cat %out_file%


pause
goto:eof


:fjq
echo %2:>> %out_file%
jq-win64.exe %1 a.json>> %out_file%
echo ,>> %out_file%
goto:eof

:mzip
set "Str="
for /f "delims=" %%b in (%out_file%) do (
    set "Str=!Str!%%~b"
)
>tmp$ echo !Str!
move /y tmp$ "%out_file%" >nul
goto:eof


4、總結

本文主要運用了:windows的bat腳本技術、jq解析json技術、動態腳本技術。iframe

  • BAT FOR循環的用法
  • BAT 函數的用法
  • BAT 讀取文件的多行,合併爲一行字符串輸出
  • jq對json的模糊匹配
  • 動態腳本

@beautifulzzzz
智能硬件、物聯網,熱愛技術,關注產品
博客:http://blog.beautifulzzzz.com
園友交流羣:414948975
相關文章
相關標籤/搜索