You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过命令行脚本读取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

关键修正说明

  1. 启用延迟扩展:setlocal enabledelayedexpansion 是为了在for循环内部正确读取修改后的变量值,否则循环内的变量引用会被提前解析,无法获取最新值。
  2. 变量赋值格式:用set "var=value"的格式,避免值中的特殊字符(如空格、引号)导致赋值异常。
  3. 字符串清理:通过!var:"=!去掉双引号,!var: =!去掉多余空格,最终得到纯净的版本号。

内容的提问来源于stack exchange,提问作者sandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:05:19