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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск и изменение содержимого в INI файле

Ответить
Настройки темы
CMD/BAT - [решено] Поиск и изменение содержимого в INI файле

Новый участник


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

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


Доброго времени всем!!!

имеется такой листинг:

[Программа1]
Версия=2.1.0.55
[Программа2]
Версия=1.0.0.14
[Программа3]
Версия=1.1.1.1
[Программа5]
версия=6.1.1.0
[программа4]
версия=2.0.0.0
[программа8]
версия=4.1.1

собственно вопрос: как написать такой батничек, чтобы он искал в этом файле нужную секцию и следующую строку менял на другую, т.е. секцию [Программа2] версия=1.0.0.14 заменить на [Программа2] версия=1.0.0.15, причем чтобы можно было одновременно заменять несколько секций с проверкой существующей версии, а то может и менять не надо
Заранее спасибо всем откликнувшимся!

Отправлено: 14:21, 07-10-2010

 

Старожил


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

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


Уточните, КАК Вы хотите передавать список данных для изменения. Файликом?

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 18:50, 07-10-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


Ну, в принципе у меня задача обрабатывать несколько разнесенных местоположений с этими фалами - проще прописать эти данные в нем самом

Отправлено: 08:55, 08-10-2010 | #3


Googler


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

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


avb_trader, весьма туманное условие, уточняющие вопросы:

- могут ли в секции присутствовать другие параметры кроме "Версия"?
- обязательно ли сохранять относительное положение секции в файле?
- что значит "с проверкой", если предполагается простая замена параметра?

-------
Как сообщить о том, что моя проблема решена?
не оказываю техподдержку через ПМ/ICQ/Mail - для этого есть форум


Отправлено: 12:32, 08-10-2010 | #4


Новый участник


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

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


amel27, спасибо за появление!! я много ваших постов прочитал - понял - Вы МАСТЕР в этом деле, пишите очень красиво!!

1. В данном случае конкретно в секции присетвтует только параметр "Версия=1.1.1.1", но хотелось бы универсальности, чтобы не только сдесь это использовать, но и на других примерах (скадем конфиги openvpn - для замены в них параметров)
2. Сохранять относительное положение не обязательно
3. возможно есть такой вариант что секция найдена нужная - но в ней уже заменено на требуемую версию или версия для замены не соответствует нужной. Например надо заменить
[Приложение1]
версия=1.1.1.1
на
[Приложение1]
версия=1.1.2.1
А в файле присутствует
[Приложение1]
версия=1.1.1.0

Надеюсь понятно объяснил, по крайней мере - старался

Отправлено: 13:20, 08-10-2010 | #5


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

-------
Как сообщить о том, что моя проблема решена?
не оказываю техподдержку через ПМ/ICQ/Mail - для этого есть форум

Это сообщение посчитали полезным следующие участники:

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


Новый участник


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

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


amel27, СУПЕР!!!!
Спасибо большое!!

Вы - профессионал!

Отправлено: 08:20, 11-10-2010 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск и изменение содержимого в INI файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Изменить настройки в *.ini файле через *.bat CyberMaster Скриптовые языки администрирования Windows 53 13-10-2017 23:09
Система - Что у Вас в файле Finish.ini для GUI интегратора? wolkow70 Наборы обновлений для Windows XP/2003/Windows 7 13 15-01-2011 02:07
[решено] Скрипт для удаления нужных слов в ini файле Pozia AutoIt 23 27-10-2009 18:42
CMD/BAT - [решено] Поиск каталога и копирование всего его содержимого desk Скриптовые языки администрирования Windows 4 01-07-2009 14:28
изменение содержимого файла slaine Вебмастеру 2 21-08-2005 18:30




 
Переход