如何通过命令行脚本读取JSON文件并提取version值到变量
解决批处理脚本读取JSON中version值的问题
先梳理你原脚本的核心错误:
- 批处理变量赋值不能在等号前后加空格,
set version = "%%~b"会创建名为version(带空格)的变量,而非预期的version。 - For循环参数大小写敏感,你定义了
%%A,对应的第二个参数应为%%B,小写%%b无法匹配到对应内容。 - 原分隔符设置下,读取到的键是带双引号的(如
"version"),但判断条件里写的是"version",两者不匹配导致逻辑不触发。 - 读取到的版本值自带双引号和空格,未做清理处理。
修正后的脚本(方案一:精准定位行)
@Echo off setlocal enabledelayedexpansion :: 先定位到version所在行,减少循环次数 for /f "tokens=2 delims=:" %%A in ('findstr /C:"\"version\":" Services.json') do ( set "raw_version=%%A" :: 去掉双引号和多余空格 set "version=!raw_version:"=!" set "version=!version: =!" ) echo 提取的版本号:%version% pause
修正后的脚本(方案二:遍历所有行处理)
@Echo off setlocal enabledelayedexpansion set "version=" for /f "tokens=1,2 delims=:{}," %%A in (Services.json) do ( :: 清理键名:去掉引号和空格 set "key=%%A" set "key=!key:"=!" set "key=!key: =!" if "!key!"=="version" ( :: 清理版本值:去掉引号和空格 set "raw_val=%%B" set "raw_val=!raw_val:"=!" set "raw_val=!raw_val: =!" set "version=!raw_val!" ) ) echo 提取的版本号:%version% pause
关键修正说明
- 启用延迟扩展:
setlocal enabledelayedexpansion是为了在for循环内部正确读取修改后的变量值,否则循环内的变量引用会被提前解析,无法获取最新值。 - 变量赋值格式:用
set "var=value"的格式,避免值中的特殊字符(如空格、引号)导致赋值异常。 - 字符串清理:通过
!var:"=!去掉双引号,!var: =!去掉多余空格,最终得到纯净的版本号。
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

