CMD/BAT - Изменить настройки в *.ini файле через *.bat
-
CyberMaster
CMD/BAT - Изменить настройки в *.ini файле через *.bat
Помогите пожалуйста сделать батник, изменяющий настройки в *.ini файле.
Есть файл file.ini в нем есть такие стороки:
Server_address=XXX.XXX.XXX.XXX
Server_port=XXXX
Как с помощью *.bat файла изменить значения адреса сервера и порта?
P.s текущее значения в ини файле не постоянные. То есть они могут меняться.
Есть файл file.ini в нем есть такие стороки:
Server_address=XXX.XXX.XXX.XXX
Server_port=XXXX
Как с помощью *.bat файла изменить значения адреса сервера и порта?
P.s текущее значения в ини файле не постоянные. То есть они могут меняться.
-
megaloman
Re: CMD/BAT - Изменить настройки в *.ini файле через *.bat
А насколько принципиально решение с помощью bat-файла, а, допустим, не с помощью VBS или JS скрипта?
-
Georgio
Re: CMD/BAT - Изменить настройки в *.ini файле через *.bat
KDash, я не редактирую чужие коды, а пишу свои. Уточните постановку задачи и прикрепите архив с Вашим текстовым файлом к сообщению.
-
Iska
Re: CMD/BAT - Изменить настройки в *.ini файле через *.bat
CyberMaster, проще всего перенести эту секцию в конец файла, и добалять изменяемые строки непосредственно перед применением INI-файла:
Код:
Код:
Код: Выделить всё
>>file.ini ECHO Server_address=XXX.XXX.XXX.XXX
>>file.ini ECHO Server_port=XXXX-
megaloman
Re: CMD/BAT - Изменить настройки в *.ini файле через *.bat
Цитата megaloman:
А насколько принципиально решение с помощью bat-файла, а, допустим, не с помощью VBS или JS скрипта?
Нет, нужен именно батник.
Цитата BSDельник:
Там только эти строки?
Нет, там есть еще и другие параметры...
amel27, спасибо, но данное решение мне не подойдет. Так как в том ини файле настройки поделены на секции такого вида:
Код:
Если я значения адрес сервера и порт опускаю в самый низ, то они не работают.
А насколько принципиально решение с помощью bat-файла, а, допустим, не с помощью VBS или JS скрипта?
CMD/BAT - Изменить настройки в *.ini файле через *.bat
Нет, нужен именно батник.
Цитата BSDельник:
Там только эти строки?
CMD/BAT - Изменить настройки в *.ini файле через *.bat
Нет, там есть еще и другие параметры...
amel27, спасибо, но данное решение мне не подойдет. Так как в том ини файле настройки поделены на секции такого вида:
Код:
Код: Выделить всё
[Main]
Server_address=XXX.XXX.XXX.XXX
Server_port=XXXX
[Proxy]
Enabled=0
Address=
И так далее...Если я значения адрес сервера и порт опускаю в самый низ, то они не работают.
-
BSDельник
Re: CMD/BAT - Изменить настройки в *.ini файле через *.bat
Цитата CyberMaster:
Если я значения адрес сервера и порт опускаю в самый низ, то они не работают.
вместе со всей секцией "[Main]"?.. обычно порядок секций в INI не важен
Если я значения адрес сервера и порт опускаю в самый низ, то они не работают.
CMD/BAT - Изменить настройки в *.ini файле через *.bat
вместе со всей секцией "[Main]"?.. обычно порядок секций в INI не важен
-
CyberMaster
Re: CMD/BAT - Изменить настройки в *.ini файле через *.bat
Запускаем батник, а в батнике VBS. Как вариант, пробовал в батнике построчно переписывать ини-файл в другой (идея была вырезать начала строк, анализировать их на равенство строк Server_address= и Server_port= и, при равенстве, цеплять туда новое значение после знака = ), но не очень надёжно получается, особенно если в ини-файле есть строки вида %ТраЛяЛя%. 

-
amel27
Re: CMD/BAT - Изменить настройки в *.ini файле через *.bat
amel27, в любом случае не подойдет
Так как при каждом запуске батника, будут добавляться в конец файла новые строки.
Цитата megaloman:
Запускаем батник, а в батнике VBS. Как вариант, пробовал в батнике построчно переписывать ини-файл в другой (идея была вырезать начала строк, анализировать их на равенство строк Server_address= и Server_port= и, при равенстве, цеплять туда новое значение после знака = ), но не очень надёжно получается, особенно если в ини-файле есть строки вида %ТраЛяЛя%.
Можно подробнее? Не силен я в этих скриптах
Так как при каждом запуске батника, будут добавляться в конец файла новые строки.Цитата megaloman:
Запускаем батник, а в батнике VBS. Как вариант, пробовал в батнике построчно переписывать ини-файл в другой (идея была вырезать начала строк, анализировать их на равенство строк Server_address= и Server_port= и, при равенстве, цеплять туда новое значение после знака = ), но не очень надёжно получается, особенно если в ини-файле есть строки вида %ТраЛяЛя%.
CMD/BAT - Изменить настройки в *.ini файле через *.bat
Можно подробнее? Не силен я в этих скриптах

-
megaloman
Re: CMD/BAT - Изменить настройки в *.ini файле через *.bat
Цитата CyberMaster:
при каждом запуске батника, будут добавляться в конец файла новые строки
это не причина, сделать "болванку", а батником ее копировать и добавлять в копию нужные строки
при каждом запуске батника, будут добавляться в конец файла новые строки
CMD/BAT - Изменить настройки в *.ini файле через *.bat
это не причина, сделать "болванку", а батником ее копировать и добавлять в копию нужные строки
-
CyberMaster
Re: CMD/BAT - Изменить настройки в *.ini файле через *.bat
Код:
Исходник в
Код: Выделить всё
' -----------------------------------------------------------------------------------
' Скрипт считывает указанный полным путём текстовый файл (переменная InName)
' В файле ищется первое вхождение каждой из двух подстрок (переменная Str1 и Str2)
' (эти подстроки должны быть в начале строки без лидирующих пробелов!)
' Найденная строки заменяются на строки соответственно вида Str1+EqStr1 и Str2+EqStr2
' Строки EqStr1 и EqStr2 передаются в аргументах скрипта
' Полученный результат запис на место старого файла
' -----------------------------------------------------------------------------------
' Пример использования из командной строки
' H:\Delete\ModiIn.vbs "123.456.789.012" "3456"
' -----------------------------------------------------------------------------------
InName = "H:\Delete\kuku.txt"
Str1 = "Server_address="
Str2 = "Server_port="
Set InArg=WScript.Arguments
EqStr1 = InArg(0)
EqStr2 = InArg(1)
' EqStr1 = "111.222.333.444"
' EqStr2 = "5555"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set InFile = FSO.OpenTextFile(InName, 1, False)
AllStr = InFile.ReadAll
InFile.Close
AllStr = Replace(AllStr, Chr(10), "")
Mass = Split(AllStr, Chr(13))
i1 = LBound(Mass)
i2 = UBound(Mass)
Call ModiIniSub(Mass, i1, i2, Str1, EqStr1)
Call ModiIniSub(Mass, i1, i2, Str2, EqStr2)
Set InFile = FSO.OpenTextFile(InName, 2, False)
For i = i1 To i2
If i i2 Then
InFile.WriteLine Mass(i)
Else
InFile.Write Mass(i)
End If
Next
InFile.Close
Sub ModiIniSub(Mass, i1, i2, Stroka, EqStroka)
LStroka = Len(Stroka)
For i = i1 To i2
If Mid(Mass(i), 1, LStroka) = Stroka Then
Mass(i) = Stroka + EqStroka
Exit For
End If
Next
End SubИсходник в
файле