批量读取INI文件并将其设置为全局变量

2024-05-10

我有一个批处理文件,它已经做了很多事情,并试图扩展它以从 ini 文件中获取一些数据。

例如 ini 文件看起来像这样

[Settings1]
Text=Text
Text1=Text
Text2=Text

[Settings2]
Text=Text
Text1=Text
Text2=Text

我已经找到了一种方法来通过以下批次获取我需要的部分

@echo off

setlocal EnableDelayedExpansion
set "file=settings.ini"
set "section=[Settings1]"

set flag=0
for /f "usebackq delims=" %%# in ("%file%") do (
    set line=%%#
    ::trim
    for /f "tokens=* delims= " %%a in ("!line!") do set "line=%%a"
    set f=!line:~0,1!
    if "!f!" neq ";" (
        if !flag! equ 1 (
            ::for /f "tokens=1* delims==" %%a in ("!line!") do (
            for /f "tokens=1* delims==" %%a in ("%%#") do (
                set "!section!.%%a=%%b"

            )
        )

        if "!f!" equ "[" (
            if "!line!" equ "%section%" (
                set flag=1
            ) else (
                set flag=0
            )
        )       
    )
)

set %section%

然后输出以下内容

Settings1.Text=Text
Settings1.Text1=Text
Settings1.Text2=Text

我想要做但不知道如何做的是接受每个输出并分配值,这样就可以将等号后面的“文本”分配给它自己的变量,然后可以在我的脚本中调用该变量


看看下面的例子。我使用了您现有的代码,尽管它可以改进。你可以看到我是如何利用的for /l循环让您了解可以做什么。您可以调整它以适合您想要的结果。您也可以为不同的部分考虑相同的解决方案。

@echo off
setlocal enabledelayedexpansion
set "file=settings.ini"
set "section=[Settings1]"
set num=0
set flag=0
for /f "usebackq delims=" %%# in ("%file%") do (
    set line=%%#
    ::trim
    for /f "tokens=* delims= " %%a in ("!line!") do set "line=%%a"
    set f=!line:~0,1!
    if "!f!" neq ";" (
        if !flag! equ 1 (
            ::for /f "tokens=1* delims==" %%a in ("!line!") do (
            for /f "tokens=1* delims==" %%a in ("%%#") do (
                set "!section!.%%a=%%b"
                set /a num+=1

            )
        )

        if "!f!" equ "[" (
            if "!line!" equ "%section%" (
                set flag=1
            ) else (
                set flag=0
            )
        )       
    )
)

for /l %%a in (0,1,%num%) do (
  if %%a equ 0 (
     if defined [Settings1].Text echo(%[Settings1].Text%
   ) else (
     if defined [Settings1].Text%%a echo(![Settings1].Text%%a!
  )
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

批量读取INI文件并将其设置为全局变量 的相关文章

随机推荐