Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата avb_trader:
пишите очень красиво!! »
гм... ну не знаю, попытаюсь... насколько получится...

забыл уточнить про кодировку исходного INI, предположим что это WIN (ANSI/1251)
само собой, кодировка самого батника родная - DOS (OEM/866)

батник устанавливает параметр "версия" секции "[Программа2]" равным "1.0.2.14",
то же для секции "[Программа3]", но только если исходное значение параметра равно "2.1.0.0"

Код: Выделить весь код
@echo off

call :SETVAL file.ini [Программа2] версия 1.0.2.14
call :SETVAL file.ini [Программа3] версия 1.0.2.14 2.1.0.0

EXIT

:SETVAL
CHCP 1251 >nul& SETLOCAL DisableDelayedExpansion& set $f=F
(for /f "usebackq tokens=1* delims==" %%a in ("%~1") do (
  set "$a=%%a"& set "@a=%%~a"& set "$b=%%b"& set "@b=%%b"
  SETLOCAL EnableDelayedExpansion
    if "!@a:~,1!"=="[" (echo !$a!
      if /i "!@a!"=="%~2" (set "$f=T") else set "$f=F" ) else (
      if "!$f!"=="T" if /i "!@a!"=="%~3" (
      if "%~5"=="" (set "$b=%4") else if "%~5"=="!@b!" set "$b=%4")
      echo !$a!=!$b!
    )
  for /f "delims=" %%i in ("!$f!") do ENDLOCAL& set "$f=%%~i"
))>"%~dpn0.tmp"
copy /y "%~dpn0.tmp" "%~1" >nul&& del "%~dpn0.tmp"
CHCP 866 >nul& ENDLOCAL& exit /b
P.S. данный вариант предполагает отсутствие незначащих пробелов между элементами
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:16, 09-10-2010 | #6