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

如何在Batch文件中解析动态键值对字符串并设置变量?

在Batch文件中动态解析键值对字符串的方法

刚好之前碰过类似的需求,Batch里固定长度的:~start,length写法确实搞不定这种动态的键值对串,不过咱们可以靠字符串替换+循环的思路来实现,直接上可运行的代码:

@echo off
setlocal enabledelayedexpansion

:: 原始输入字符串
set "input_str=User_Name=root;Password=1234;Server=192.168.1.49;DriverID=MySQL;Database=dbTest"

:: 循环处理每个键值对
:loop
:: 检查是否还有分号分隔的内容
if not "!input_str!"=="" (
    :: 截取第一个分号前的键值对,同时更新剩余字符串
    set "pair=!input_str:;=" & set "input_str=!"
    :: 按等号分割键和值,完成变量赋值
    for /f "tokens=1,2 delims==" %%a in ("!pair!") do (
        :: 把原始键名转换成你需要的格式(比如统一小写)
        set "key=%%a"
        set "key=!key:User_Name=username!"
        set "key=!key:Password=password!"
        set "key=!key:Server=server!"
        set "key=!key:DriverID=driverid!"
        set "key=!key:Database=database!"
        :: 给目标变量赋值
        set "!key!=%%b"
    )
    :: 继续处理剩余的键值对
    goto loop
)

:: 验证解析结果
echo username=!username!
echo password=!password!
echo server=!server!
echo driverid=!driverid!
echo database=!database!

endlocal

核心逻辑说明:

  • 延迟扩展:必须开启setlocal enabledelayedexpansion,这是Batch里循环中动态读取/修改变量的必备操作,不然循环内的变量值会一直是初始状态。
  • 分割字符串:!input_str:;=" & set "input_str=!"这个技巧能快速把第一个分号前的键值对剥离出来,同时把剩下的内容重新赋值给input_str,实现循环拆解。
  • 键名映射:代码里把原始的User_Name这类命名转换成了小写的username,如果不需要统一格式,直接用set "%%a=%%b"就能按原始键名赋值。
  • 值提取:通过for /f以=为分隔符,把每个键值对拆成键和值两部分,完成最终的变量赋值。

这个方案完全适配动态长度的输入字符串,不管每个键值对的长度怎么变,都能准确提取对应的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:07:23