[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 求问 ...
随机推荐
- python 跟踪IP模块
#coding=utf-8 import re import subprocess def tracertIP(ip): p = subprocess.Popen(['tracert',ip],std ...
- git和小乌龟在windows下安装
一:所需软件 (1):git 下载地址:https://git-scm.com/download (2):TortoiseGit 下载地址:https://tortoisegit.org/downlo ...
- Linux磁盘系统——磁盘系统简介
Linux磁盘系统——磁盘系统简介 摘要:本文主要学习了Linux系统中有关磁盘的一些知识. 文件系统 说明 硬盘是用来存储数据的,可以将其想象成柜子,只不过柜子是用来存储衣物的.新买来的硬盘,通常要 ...
- jQuery遍历 - 过滤first(),last()和eq()使用
jQuery遍历 - 过滤最基本的过滤方法是first(),last()和eq(),它们允许您根据元素在一组元素中的位置选择特定元素. 其他过滤方法(如filter()和not())允许您选择与特定条 ...
- SpirngBoot整合Spring-data-JPA
0.引言 使用SpringBoot data jpa技术相比mybatis是比较难的,这里只给出整合方法 1.引入SpringBoot data jpa <!--JPA依赖--> < ...
- SAP MM MIGO过账报错 - 用本币计算的余额 - 之对策
SAP MM MIGO过账报错 - 用本币计算的余额 - 之对策 使用MIGO事务代码对采购订单4500000191,执行收货,系统报错: 详细错误信息如下: 用本币计算的余额 消息号 F5703 诊 ...
- 【转】Git使用教程之远程仓库
1.远程仓库 在了解之前,先注册github账号,由于你的本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要一点设置: 第一步:创建SSH Key.在用户主目录下,看看有没有.ss ...
- LeetCode——Employees Earning More Than Their Managers
The Employee table holds all employees including their managers. Every employee has an Id, and there ...
- java中方法的重载和覆盖分别要满足的条件
1.重载:遵循“两同三不同” 两同:同一个类中的同名方法 三不同:形参的类型,个数,顺序不同 特别提醒: 返回值不同构不能方法重载 形参名称不同构不成方法重载 2.覆盖(重写)的要求 子类方法的名称, ...
- JS高阶---事件循环模式(事件轮询)
大纲: 相关知识点: 主体: (1)模型原理 JS部分:初始化代码执行 WebAPIS:执行上下文对象(不是一个真的对象,而是一个抽象的虚拟对象,可以看做栈里的一个区域,包含很多对象) setTime ...