通过字符串中具有类似变量的标记批量编辑文本文件

时间:2011-04-01 18:48:20

标签: batch-file edit ini string

我正在尝试从批处理文件中编辑一个简单的txt ini文件而不使用实用程序。

感谢先前由 paxdiablo 发布的代码,我可以使用以下代码的形式执行此操作。

但myfile.ini包含 thing newthing 等变量。

我只想编辑第一个,而不是第二个(包括字符串“thing”)。

我不想更改/编辑 newthing 的值。

现在每个编辑都设置两个变量的值。

@echo off
set init=50M
set max=75M
setlocal enableextensions enabledelayedexpansion
for /f "tokens=* delims=" %%a in (myfile.ini) do (
    set str1=%%a
    call :morph
    echo !str2!>>myfile_new.ini
    echo !str2!
)
endlocal
goto :eof

:morph
    set str2=
:morph1
    if not "x!str1!"=="x" (
        if "!str1:~0,6!"=="thing=" (
            set str2=!str2!thing="!init!"
            set str1=!str1:~12!
            goto :morph1
        )
        if "!str1:~0,6!"=="thong=" (
            set str2=!str2!thong="!max!"
            set str1=!str1:~12!
            goto :morph1
        )
        set str2=!str2!!str1:~0,1!
        set str1=!str1:~1!
        goto :morph1
    )
    goto :eof

myfile.ini

thing=xyz
thong=def
newthing=abc

1 个答案:

答案 0 :(得分:1)

你的代码似乎有点过于复杂 我减少它以便它起作用,但也许我误解了你的问题 但这样它就可以处理myfile.ini中的示例字符串。

@echo off
set init=50M
set max=75M
setlocal enableextensions enabledelayedexpansion
for /f "tokens=* delims=" %%a in (myfile.ini) do (
    set str1=%%a
    call :morph
    echo !str1!>>myfile_new.ini
    echo !str1!
)
endlocal
goto :eof


:morph
if "!str1:~0,6!"=="thing=" (
    set "str1=thing=!init!"
)
if "!str1:~0,6!"=="thong=" (
    set "str1=thong=!max!"
)
goto :eof