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

How to iterate through items in an .ini file with a batch file?

我目前正在尝试遍历 .ini 文件中的每个项目,并在稍后使用这些值。但我无法弄清楚如何。我的 config.ini 文件如下所示:

[items]
item_1=XXXXX
item_2=XXXXX
item_3=XXXXX
item_4=XXXXX

[SomeSection]
......

我找到了一种方法来迭代和回显 config.ini 文件中的每个项目,如下所示:

@echo off 
for /F %%i in (config.ini) do (
   echo %%i
)

我的问题是我想使用特定值。所以我必须检查 config.ini 文件中的类别和键。我尝试使用它,但我 运行 出错了:

@echo off 
for /F %%i in (config.ini) do (
   SET item = %%i
   if %item%==[items] (
      rem do something here with the key and values now
   )
 )

正如我已经提到的,我无法将值保存到另一个变量,这导致我无法使用它们的问题。

一个比较简单的方法就是预先确定目标section header的行号,然后在读取配置文件时跳过很多行,一出现括号内的字符串就停止:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Define constants here:
set "_CONFIG=%~dp0config.ini" & rem // (path to configuration file)
set "_SECT=items"             & rem // (section name without brackets)

rem // Clean up variables whose names begin with `$`:
for /F "delims==" %%V in ('2^> nul set "$"') do set "%%V="
rem // Gather number of line containing the given section (ignoring case):
for /F "delims=:" %%N in ('findstr /N /I /X /C:"[%_SECT%]" "%_CONFIG%"') do set "SKIP=%%N"
rem // Read configuration file, skipping everything up to the section header:
for /F "usebackq skip=%SKIP% delims=" %%I in ("%_CONFIG%") do (
    rem // Leave loop as soon as another section header is reached:
    for /F "tokens=1* delims=[]" %%K in ("%%I") do if "[%%K]%%L"=="%%I" goto :NEXT
    rem // Do something with the key/value pair, like echoing it:
    echo(%%I
    rem // Assign a variable named of `$` + key and assign the value:
    set "$%%I"
)
:NEXT
rem // Return assigned variables:
set "$"

endlocal
exit /B

此脚本将根据您的示例配置文件分配以下变量:

$item_1=XXXXX
$item_2=XXXXX
$item_3=XXXXX
$item_4=XXXXX