|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменить настройки в *.ini файле через *.bat |
|
CMD/BAT - Изменить настройки в *.ini файле через *.bat
|
Пользователь Сообщения: 63 |
Помогите пожалуйста сделать батник, изменяющий настройки в *.ini файле.
Есть файл file.ini в нем есть такие стороки: Server_address=XXX.XXX.XXX.XXX Server_port=XXXX Как с помощью *.bat файла изменить значения адреса сервера и порта? P.s текущее значения в ини файле не постоянные. То есть они могут меняться. |
|
Отправлено: 21:54, 29-04-2010 |
Ветеран Сообщения: 1273
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
![]() @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 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать amel27, здОрово! Отличное решение с использованием регулярных выражений. Взял на заметку. ![]() |
Отправлено: 19:50, 01-05-2010 | #14 |
Старовер Сообщения: 1708
|
Профиль | Отправить PM | Цитировать amel27
Интересно, что если задать "Server_address=1" то в ини файле будет вот так Server_address= А если уже 2 символа написать в сначении, то работает... |
------- Отправлено: 02:03, 13-08-2011 | #15 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Цитата volk1234:
![]() Глюки обработки в cmd. Решается взятием в дополнительные скобки: |
|
Отправлено: 04:43, 13-08-2011 | #16 |
Ветеран Сообщения: 1202
|
Профиль | Отправить PM | Цитировать CyberMaster, можно через chgstr сделать довольно легко
|
------- Отправлено: 08:42, 13-08-2011 | #17 |
Старовер Сообщения: 1708
|
Профиль | Отправить PM | Цитировать SendMessage
Дополнительные скобки не помогли... |
------- Отправлено: 16:32, 14-08-2011 | #18 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Цитата volk1234:
А батник идентичен батнику amel27? |
|
Отправлено: 17:17, 14-08-2011 | #19 |
Ветеран Сообщения: 1758
|
Цитата SendMessage:
Именно по этому в файле test-1.txt только одна запись об ошибке. Запись когда передавался параметр со значением 2, т.е. STDERR. |
|
Отправлено: 20:14, 14-08-2011 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Система - Что у Вас в файле 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 |
|