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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменить настройки в *.ini файле через *.bat

Ответить
Настройки темы
CMD/BAT - Изменить настройки в *.ini файле через *.bat

Пользователь


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

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


Помогите пожалуйста сделать батник, изменяющий настройки в *.ini файле.
Есть файл file.ini в нем есть такие стороки:

Server_address=XXX.XXX.XXX.XXX
Server_port=XXXX

Как с помощью *.bat файла изменить значения адреса сервера и порта?
P.s текущее значения в ини файле не постоянные. То есть они могут меняться.

Отправлено: 21:54, 29-04-2010

 

Аватара для El Sanchez

Ветеран


Contributor


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

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


CyberMaster,

Вариант CMD/BAT:
Код: Выделить весь код
@Echo Off
Setlocal ENABLEDELAYEDEXPANSION

Set "PathIniFile=C:\temp\test"
Set "IniFile=test.ini"
Set Count=1

Set /P "IP=Enter IP-address: "
Set /P "Port=Enter number of port: "

For /F "Tokens=1,2* Delims=:=" %%A In ('Findstr /IN . "%PathIniFile%\%IniFile%"') Do (
	Call :Func "%%A"
	
	If Not "%%C"=="" (
		If /I "%%B"=="Server_address" (
			Echo %%B=%IP%>>"%PathIniFile%\tmp"
		) Else (
			If /I "%%B"=="Server_port" (
				Echo %%B=%Port%>>"%PathIniFile%\tmp"
			) Else (
				Echo %%B=%%C>>"%PathIniFile%\tmp"
			)
		)
	) Else (
		Echo %%B>>"%PathIniFile%\tmp"
	)
)
Move /Y "%PathIniFile%\tmp" %IniFile% 2>nul
GoTo :EOF

:Func
	Set /A Diff=%~1-!Count!
	If %Diff% GTR 0 For /L %%A In (1,1,%Diff%) Do (Set /A Count+=1 & Echo.>>"%PathIniFile%"\tmp)
	Set /A Count+=1
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:52, 30-04-2010 | #11



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

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


Ветеран


Contributor


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

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


Еще вариант батника (недостаток - съедает все пустые строки, как побороть пока не знаю)
Мне показалась привлекательной идея цикла в цикле: сначала из файла берём строку, потом выделяем из неё кусок с помощью оператора For
Код: Выделить весь код
Echo Off
rem --------------------------------------------------
rem Преобразуем файл, определённый в переменной InFile
rem Пример использования в командной строке
rem
rem Z_My.bat 123.456.789.012 3456
rem
rem --------------------------------------------------

If '%1%2==' GoTo :End

Set InFile="H:\Delete\kuku.txt"
Set Str1=Server_address
Set Str2=Server_port

rem --------------------------------------------------
Call :Replace %1 %2 %InFile%
GoTo :End 

:Replace

Set InFileBak="%~3.bak"
Move %InFile% %InFileBak% 

FOR /F "usebackq  delims=" %%i IN (%InFileBak%) DO (
   FOR /F "usebackq  delims==" %%j IN ('%%i') DO (
   If Not %%j==%Str1% (
      If Not %%j==%Str2% (
         Echo %%i>>%3
      ) Else (
         Echo %%j=%2>>%3
      )
   ) Else (
      Echo %%j=%1>>%3
   )
   )
) 

:End

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

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

Отправлено: 20:27, 30-04-2010 | #12


Googler


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

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


Цитата El Sanchez:
Вариант CMD/BAT »
коль пошла такая пьянка, до кучи еще вариант:

Код: Выделить весь код
@Echo Off

CALL :REPLINE "file.ini" "Server_address=" "Server_address=192.1.1.1"
CALL :REPLINE "file.ini" "Server_port=" "Server_port=8080"

:REPLINE
 If Not Exist "%~1" Exit /B 1
 If Exist "%~dpn1.tmp" DEL /F/Q "%~dpn1.tmp"

 Set $N=0& For /F "Delims=:" %%i In ('FindStr /BINRC:" *%~2" "%~1"') Do Set $N=%%i
 If %$N% NEQ 0 For /F "Tokens=1* Delims=:" %%i In ('FindStr /ENRC:"$" "%~1"') Do If "%%i"=="%$N%" (
 Echo %~3>>"%~dpn1.tmp" ) ELSE Echo.%%j>>"%~dpn1.tmp"

 If Exist "%~dpn1.tmp" If Exist "%~1" DEL /F/Q "%~1"
 If Exist "%~dpn1.tmp" REN "%~dpn1.tmp" "%~nx1"
Exit /B 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:36, 01-05-2010 | #13


Аватара для El Sanchez

Ветеран


Contributor


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

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



amel27, здОрово! Отличное решение с использованием регулярных выражений. Взял на заметку.

Отправлено: 19:50, 01-05-2010 | #14


Аватара для volk1234

Старовер


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

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


amel27
Интересно, что если задать
"Server_address=1"
то в ини файле будет вот так
Server_address=

А если уже 2 символа написать в сначении, то работает...

-------

Ю-ху!


Отправлено: 02:03, 13-08-2011 | #15


Старожил


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

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


Цитата volk1234:
Интересно, что если задать
"Server_address=1"
то в ини файле будет вот так
Server_address=
А если уже 2 символа написать в сначении, то работает... »
А если значение 0 или от 2 до 9, то параметр Server_address вообще исчезает. Ну и с Server_port, конечно, то же самое.
Глюки обработки в cmd. Решается взятием в дополнительные скобки:
Код: Выделить весь код
If "%%i"=="%$N%" ((Echo %~3)>>"%~dpn1.tmp")
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:43, 13-08-2011 | #16


Аватара для sLiDeR-X

Ветеран


Автор проектов


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

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


CyberMaster, можно через chgstr сделать довольно легко

-------
Конструктор RDS_Boot_KIT и комплект Recovery DiskSuite


Отправлено: 08:42, 13-08-2011 | #17


Аватара для volk1234

Старовер


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

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


SendMessage
Дополнительные скобки не помогли...

-------

Ю-ху!


Отправлено: 16:32, 14-08-2011 | #18


Старожил


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

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


Цитата volk1234:
Дополнительные скобки не помогли... »
Странно. у меня работает. Как и простой пробел перед направлением в файл.
Код: Выделить весь код
If "%%i"=="%$N%" (Echo %~3 >>"%~dpn1.tmp")
А батник идентичен батнику amel27?

Отправлено: 17:17, 14-08-2011 | #19


Ветеран


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

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


Цитата SendMessage:
А если значение 0 или от 2 до 9 »
Просто %3 определяется как дескриптор перенаправления выходного потока. Пример:
Код: Выделить весь код
@echo off

for /l %%i in (0,1,9) do call:echo %%i
goto:eof

:echo
echo %1>>test-1.txt
echo.%1>>test-2.txt
Именно по этому в файле test-1.txt только одна запись об ошибке. Запись когда передавался параметр со значением 2, т.е. STDERR.

Отправлено: 20:14, 14-08-2011 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменить настройки в *.ini файле через *.bat

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Система - Что у Вас в файле Finish.ini для GUI интегратора? wolkow70 Наборы обновлений для Windows XP/2003/Windows 7 13 15-01-2011 02:07
[решено] Скрипт для удаления нужных слов в ini файле Pozia AutoIt 23 27-10-2009 18:42
Любой язык - Проверка сетевых ресурсов в BAT-файле chkur Скриптовые языки администрирования Windows 1 03-12-2008 12:39
Решено | Можно ли задать параметры в файле boot.ini пред инсталляцией? botvin Автоматическая установка Windows 2000/XP/2003 2 15-04-2006 02:46




 
Переход