[BAT脚本] 1、BAT脚本FOR循环操作文件和命令返回实例
Wednesday, 31. October 2018 08:18PM - beautifulzzzz
一、需求
需要在windows上实现一个bat脚本解析json,将json转换为自己想要的key-value样式,来压缩复杂json。
此外为了保证脚本的灵活性,我在json中添加一个bat节点,用于指明需要抽取该json中的哪些节点进行压缩( 1>某些节点信息没有用,因此不用提取;2>节点所对应的key太长了,因此可以用新的key替代老的key来压缩)
二、json例子
json例子如下 a.json:
{
"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"
}
}
}
三、bat脚本
解析脚本为 a.bat:
该脚本首先从a.json中读取bat的值:
1)这里不直接用.light.bat.value的原因是:light关键词可能是其他值,因此需要采用特殊的写法进行模糊匹配;
2)这里使用bat的FOR的用法,比较复杂,其中:delims=/ tokens=2,3的意思是每次执行jq-win64.exe...的命令返回的每一行,通过/分割为多列,取其中的第2、3列赋值给%%I和%%J;
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
四、总结
本文主要运用了:windows的bat脚本技术、jq解析json技术、动态脚本技术。
- BAT FOR循环的用法
- BAT 函数的用法
- BAT 读取文件的多行,合并为一行字符串输出
- jq对json的模糊匹配
- 动态脚本

@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975
[BAT脚本] 1、BAT脚本FOR循环操作文件和命令返回实例的更多相关文章
- 【转载】恢复误删文件--DOS命令应用实例(一)
<电脑爱好者>报转载第一辑第二篇之恢复误删文件--DOS命令应用实例(一) 恢复误删文件--DOS命令应用实例(一) 上期我们讲述了 ...
- windows BAT脚本2个服务器间传递文件
1. 脚本功能: 实现2个服务器间文件的传递,例如从A服务器往B服务器上传文件 2. 实现步骤: 2.1 服务器连结,找到指定路径,读取所需要上传的文件,将文件名称复制到一个文件下 (此处考虑可能需要 ...
- bat脚本删除一周前的文件
bat脚本删除7天前的文件 @echo off forfiles /p D:\logstash-1.4.2\bin\ /m *.log -d -7 /C "cmd /c del /f @pa ...
- [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...
- [Tomcat 源码分析系列] (一) : Tomcat 启动脚本-startup.bat
概述 我们通常使用 Tomcat 中的 startup.bat 来启动 Tomcat. 但是这其中干了一些什么事呢? 大家都知道一个 Java 程序需要启动的话, 肯定需要 main 方法, 那么这个 ...
- 用python & bat写软件安装脚本 + HM NIS Edit自动生成软件安装脚本
2019-03-11更新:原来NSIS脚本也可以禁用64位文件操作重定向的! 1.在安装脚本的开始处定义 LIBRARY_X64. !include "MUI.nsh"!inclu ...
- windows脚本bat编程:WIN10脚本自动启动虚拟环境中的jupyter
python编程对各种扩展包的版本依赖较严格,为了解决版本差异,通用情况下会使用virtualenv创建的虚拟环境来独立应用.那么每次使用的时候就需要启动虚拟环境,如果每次都是手工启动,每次输入几条命 ...
- Windows系统使用vbs脚本或bat脚本强制杀死指定所有进程 vbs实现循环持续写入内容到vbs打开开的记事本 使用vbs、bat添加windows计划任务 使用cmd schtasks命令添加windows计划任务
以下脚本windows7下成功运行过,脚本也可以windows计划任务程序一起组合使用 新建一个记事本文档粘贴下面代码后将新建的记事本文档重命名下面对应的脚本名就能使用了: 添加windows计划任务 ...
- BAT脚本如何自动执行 adb shell 以后的命令
@echo off echo su > temp.txt echo 其它命令 >> temp.txt adb shell < temp.txt del temp.txt 求问 ...
随机推荐
- webapi 集成swagger
参考资料:Stack Overflow 我自己写的demo:SwaggerDemoApi 在已有的webapi项目或者创建webapi项目中,打开nuget管理器 搜索:swagger 安装截图中的插 ...
- CodeFirst开发方式创建数据库
1).新建ADO.NET实体数据模型--->选择空CodeFirst模型 2).新建两个实体类(客户表和订单信息表) using System; using System.Collections ...
- yii2 HeadersAlreadySentException 报错
An Error occurred while handling another error:exception 'yii\web\HeadersAlreadySentException' with ...
- 解决U盘不能分配空间(windows下操作)
亲测可行 1.WIN+R => cmd => diskpart命令进入工具. 2.使用LIST DISK查看所有磁盘,?提示所有命令. 3.SELECT DISK 1将磁盘聚焦到1号磁盘, ...
- Kail Linux xface 2019.2
概述: -OS: Kali-Rolling (2019.2) -DE: XFCE -WM: Arc-Dark -WM Theme: Arc-Dark -Icons: Korla -Term Font: ...
- SpringBoot的学习二:整合Redis,JPA,Mybatis
Redis介绍: 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API 特性: Redis 与其他 key - value 缓 ...
- GCN实现3
参考 : 首先看两篇论文,大概了解一下原理性的东西: GRAPH CONVOLUTIONAL NETWORKS THOMAS KIPF, 30 SEPTEMBER 2016 http://tkipf. ...
- Prometheus node_exporter grafana部署安装
1.环境 centos7 prometheus-2.10.0.linux-amd64.tar.gz node_exporter-0.18.1.linux-amd64.tar.gz 2.安装 创建sys ...
- [Go] golang的用途和windows搭建环境
Golang核心编程: 区块链研发工程师(分布式账本技术,互联网数据库技术,特点是去中心化) Go服务器端/游戏软件工程师(现在主流是C C++,处理日志,数据打包,文件处理,美团后台流量支撑,处理大 ...
- Ubuntu18.04.2下安装 RTX2080 Nvidia显卡驱动
转载请注明出处:BooTurbo https://www.cnblogs.com/booturbo/p/11261903.html 不久前入手了蓝天P870TM1G准系统,配置如下: 1. Z370 ...