bat脚本:将ini文件两行值转json格式

原文件

.ini:目标转换第2行和第三行成下方json

ini 复制代码
[info]
listKey=key1^key2^key3
listName=A大^B最小^c最好
ccc=1^2^3^
ddd=0^1^9
目标格式

生成同名json文件,并删除原ini文件

json 复制代码
[
{
"value":"key1",
"text":"A大"
},
{
"value":"key2",
"text":"B最小"
},
{
"value":"key3",
"text":"c最好"
}
]
bat最终实现

最需要注意的问题就是原来ini文件的格式,bat文件要保持一致,不然输入汉字程序就执行错误,源文件汉字还会乱码。

bash 复制代码
@echo off
setlocal ENABLEDELAYEDEXPANSION
chcp 65001
set path=%cd%
set currow=1
:loop
for /r "%path%" %%i in (*.ini) do (
    set filename=%%~ni
    if "!filename!"=="" pause
    echo [>!filename!.json
    goto fileHandler
)
:fileHandler
for /f "skip=%currow% tokens=2 delims==" %%a in (!filename!.ini) do (
    set /a num+=1
    echo !currow!
    if defined remain (echo !remain! --end) else if !currow!==1 (set remain=%%a)
    if defined remain1 (echo !remain1! --end) else if !currow!==2 (set remain1=%%a)
    if !currow!==1 goto keyHandler
    if !currow!==2 goto nameHandler
)
:keyHandler    
echo {>>!filename!.json
for /f "tokens=1* delims=^" %%b in ("%remain%") do (
    echo "value":"%%b",>>!filename!.json
    set currow=2
    set remain=%%c
)
if defined remain1 (goto nameHandler) else (goto fileHandler)  
    :nameHandler
    for /f "tokens=1* delims=^" %%d in ("%remain1%") do (
        echo "text":"%%d">>!filename!.json
        set currow=1
        set remain1=%%e
    )
if "!remain!"=="" (echo }>>!filename!.json) else (echo },>>!filename!.json)
if defined remain1 goto fileHandler
echo ]>>!filename!.json
del /f /p !filename!.json
set filename=""
set num=0
set remain=
goto loop
  • %cd% 当前目录路径
  • echo 文字>xxx.txt >覆盖输入, >> 追加输入
  • chcp 65001 utf-8
  • set filename=%%~ni%%~ni文件名 %%~xi文件后缀名,还有很多,用到什么可以查。
  • if else 不能换行,执行语句加()
  • 执行完一个文件变量值恢复一下,不然下一个文件会出错
  • 当前代码在中文文件名会出错,没法转换。

重点说明
for /f "skip=%currow% tokens=2 delims==" %%a in (!filename!.ini)
for /f "tokens=1* delims=^" %%b in ("%remain%")

  1. for /f 语句是用来逐行读取文件的。
  2. skip=%currow% 从第几行开始读取。
  3. delims=^ 按照^将每行拆分,可以写其他符号,也可以写多个符号或者字符。
  4. tokens 上面拆分的结果当作一个数组,如果直接写数字就是取每行第几个,*代表所有,1*第一个和其他,作用就是循环里 %%b %%c就是对应的值。上面就是每次取第一个输出,后面的放到变量里,进入下一行同样操作,这样能让json一个{}里放两行对应的内容。
  5. 后面(!filename!.ini)("%remain%")读取文件和字符串,也可以('type !filename!.ini|findstr string')这种格式。
相关推荐
宇宙无敌花心大萝卜8 天前
使用BAT批处理加PYTHON进行WORD批量文字删除
python·word·bat·批处理
宇宙无敌花心大萝卜12 天前
使用bat批量获取WORD中包含对应字符的段落,段落使用回车换行
开发语言·word·bat·批处理·vbs
GarryLau3 个月前
Wndows bat将一个目录下所有子文件夹的路径导出到txt文本
windows·bat
Paddy哥3 个月前
win cmd命令 停止删除mysql服务和杀掉mysql进程
mysql·bat·cmd
kingking444 个月前
如果使用wmic 在bat脚本中获取当前系统时间?
windows·bat
letisgo56 个月前
windows10使用bat脚本安装前后端环境之msyql5.7安装配置并重置用户密码
windows·mysql·bat
x-cmd6 个月前
x-cmd pkg | bat: cat 命令现代化替代品,终端用户必备工具
运维·python·rust·终端·命令行·bat·cat
花生糖@7 个月前
使用批处理脚本自动化启动Unreal Engine项目
运维·游戏·自动化·虚幻·bat
胖墩会武术8 个月前
bat批处理文件 —— 用于自动化环境配置和项目执行
python·bat·exe
码上飞扬9 个月前
Windows批处理入门:快速掌握批处理脚本的基本技巧
windows·bat·批处理