我有一个批处理文件,它已经做了很多事情,并试图扩展它以从 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(使用前将#替换为@)