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')这种格式。
相关推荐
Paddy哥2 天前
win cmd命令 停止删除mysql服务和杀掉mysql进程
mysql·bat·cmd
kingking441 个月前
如果使用wmic 在bat脚本中获取当前系统时间?
windows·bat
letisgo53 个月前
windows10使用bat脚本安装前后端环境之msyql5.7安装配置并重置用户密码
windows·mysql·bat
x-cmd3 个月前
x-cmd pkg | bat: cat 命令现代化替代品,终端用户必备工具
运维·python·rust·终端·命令行·bat·cat
花生糖@3 个月前
使用批处理脚本自动化启动Unreal Engine项目
运维·游戏·自动化·虚幻·bat
胖墩会武术4 个月前
bat批处理文件 —— 用于自动化环境配置和项目执行
python·bat·exe
码上飞扬6 个月前
Windows批处理入门:快速掌握批处理脚本的基本技巧
windows·bat·批处理
心之所向-6 个月前
Windows定时任务执行脚本
windows·脚本·bat·windows定时任务·windows脚本
闭关苦炼内功8 个月前
Windows 下 bat 脚本调用 Git bash 环境 sh 脚本
windows·git·bash·shell·bat