如何使用批处理文件遍历.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
相关产品推荐
相关产品推荐

