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

如何使用批处理文件遍历.ini文件中的配置项?

Batch处理INI配置文件指定区块取值方案

问题根因

你的代码存在3个核心错误导致无法正常读取变量:

  • 批处理在()包裹的代码块、for循环内修改变量默认不会实时生效,必须先开启延迟变量扩展,且块内变量取值要用!变量名!而非%变量名%
  • SET item = %%i中等号左右加了多余空格,会导致变量名本身带空格、值开头带空格,赋值要使用set "变量名=值"的格式避免冗余空格
  • 默认for /F会按空格、tab分割行内容,仅取第一个字段,配置值含空格时会读取不全,需要加"delims="参数保留整行内容

可直接运行的实现代码

以下代码可精准读取[items]区块下的所有键值对,你可以直接在对应位置添加处理逻辑:

@echo off
setlocal enabledelayedexpansion
:: 目标区块匹配标记,0=未进入目标区块,1=已进入
set "in_target_section=0"

:: 遍历INI所有行,delims=保留整行内容
for /F "delims=" %%l in (config.ini) do (
    set "line=%%l"
    :: 判断是否为区块标记行
    if "!line:~0,1!"=="[" if "!line:~-1!"=="]" (
        if "!line!"=="[items]" (
            set "in_target_section=1"
        ) else (
            set "in_target_section=0"
        )
        goto next_line
    )

    :: 仅处理目标区块内的非空行
    if !in_target_section! equ 1 if not "!line!"=="" (
        :: 按第一个=分割键和值
        for /F "tokens=1* delims==" %%k in ("!line!") do (
            set "config_key=%%k"
            set "config_value=%%l"
            echo 读取到配置:键=!config_key!,值=!config_value!
            :: 此处添加你自己的配置处理逻辑
        )
    )
    :next_line
)
endlocal

扩展说明

  • 要匹配其他区块,仅需将if "!line!"=="[items]"中的[items]替换为你要处理的区块名即可
  • 要过滤INI注释行,可在处理行的逻辑前添加if not "!line:~0,1!"==";"判断,跳过以;开头的注释行
  • 代码块内所有变量取值必须用!包裹,不要使用%,否则读取的是循环执行前的旧变量值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:27:04