Редактирование txt файла из пакета с помощью токенов с похожими переменными в строке - PullRequest
1 голос
/ 01 апреля 2011

Я пытаюсь редактировать простой текстовый INI-файл из командного файла без использования утилиты.

Благодаря коду, ранее опубликованному paxdiablo Я могу сделать это с помощью формыкод ниже.

Однако myfile.ini содержит такие переменные, как thing и newthing .

Я хочу редактировать только первое, а не второе(который включает в себя строку "вещь").

Я не хочу изменять / редактировать значение 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 Ответ

1 голос
/ 02 апреля 2011

Ваш код кажется слишком сложным.
Я уменьшил его, чтобы он работал, но, возможно, я неправильно понял вашу проблему.
Но таким образом он может обрабатывать образцы строк в 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
...