Чтение INI-файла и установка его в качестве глобальных переменных в пакетном режиме - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть пакетный файл, который уже делает кучу вещей и пытается расширить его, чтобы получить некоторые данные из 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

Что я хочу сделать но не могу понять, как это сделать, это взять в каждом из этих выходных данных и присвоить значение, так что просто «Текст» после знака равенства его собственной переменной, которая затем может быть вызвана позже в моем сценарии

1 Ответ

1 голос
/ 12 февраля 2020

Посмотрите на приведенный ниже пример. Я использовал ваш существующий код, хотя его можно улучшить. Вы можете видеть, как я использовал for /l l oop, чтобы дать вам представление о том, что можно сделать. Вы можете настроить это, чтобы соответствовать желаемому результату. Вы можете рассмотреть одно и то же решение для разных секций.

@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!
  )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...