![]() |
Изменить настройки в *.ini файле через *.bat
Помогите пожалуйста сделать батник, изменяющий настройки в *.ini файле.
Есть файл file.ini в нем есть такие стороки: Server_address=XXX.XXX.XXX.XXX Server_port=XXXX Как с помощью *.bat файла изменить значения адреса сервера и порта? P.s текущее значения в ини файле не постоянные. То есть они могут меняться. |
А насколько принципиально решение с помощью bat-файла, а, допустим, не с помощью VBS или JS скрипта?
|
Там только эти строки?
|
CyberMaster, проще всего перенести эту секцию в конец файла, и добалять изменяемые строки непосредственно перед применением INI-файла:
Код:
>>file.ini ECHO Server_address=XXX.XXX.XXX.XXX |
Цитата:
Цитата:
amel27, спасибо, но данное решение мне не подойдет. Так как в том ини файле настройки поделены на секции такого вида: Код:
[Main] |
Цитата:
|
Запускаем батник, а в батнике VBS. Как вариант, пробовал в батнике построчно переписывать ини-файл в другой (идея была вырезать начала строк, анализировать их на равенство строк Server_address= и Server_port= и, при равенстве, цеплять туда новое значение после знака = ), но не очень надёжно получается, особенно если в ини-файле есть строки вида %ТраЛяЛя%. :closed-to
|
amel27, в любом случае не подойдет :) Так как при каждом запуске батника, будут добавляться в конец файла новые строки.
Цитата:
|
Цитата:
|
Вложений: 1
Код:
' ----------------------------------------------------------------------------------- |
CyberMaster,
Вариант CMD/BAT: Код:
@Echo Off |
Еще вариант батника (недостаток - съедает все пустые строки, как побороть пока не знаю)
Мне показалась привлекательной идея цикла в цикле: сначала из файла берём строку, потом выделяем из неё кусок с помощью оператора For Код:
Echo Off |
Цитата:
Код:
@Echo Off |
amel27, здОрово! Отличное решение с использованием регулярных выражений. Взял на заметку. :good: |
amel27
Интересно, что если задать "Server_address=1" то в ини файле будет вот так Server_address= А если уже 2 символа написать в сначении, то работает... |
Цитата:
Глюки обработки в cmd. Решается взятием в дополнительные скобки: Код:
If "%%i"=="%$N%" ((Echo %~3)>>"%~dpn1.tmp") |
CyberMaster, можно через chgstr сделать довольно легко
|
SendMessage
Дополнительные скобки не помогли... |
Цитата:
Код:
If "%%i"=="%$N%" (Echo %~3 >>"%~dpn1.tmp") |
Цитата:
Код:
@echo off |
текст батника
Код:
@Echo Off Код:
[DrWU] Убрал в ини файле и ваш совет помог- если сделать пробел между %3 и >> то работает :) |
amel27,
А можно немного усложнить задачу? Что если часть значения которое нужно заменить необходимо вычислить? Например переменную %PROGRAMFILES% в пути C:\Program Files\Opera\profile\scripts ? Например должно получится так CALL :REPLINE "operaprefs.ini" "User JavaScript File=" "User JavaScript File=C:\Program Files\Opera\profile\scripts" Но для этого нужно вычислить с начало переменную и подставить его в значение... |
Anton04, ну и напиши
Код:
CALL :REPLINE "operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts" |
Цитата:
Так теперь хочется немного универсальности, что бы можно было запускать прямо из командной строки типа: edit_ini_file.cmd "%PROGRAMFILES%\Opera\profile\scripts\operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts" т.е. прописывать путь к файлу в котором менять и что менять не редактируя сам скрипт. Кто поможет в реализации? :help: |
Цитата:
Код:
CALL :REPLINE "operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts" Код:
CALL :REPLINE %1 %2 %3 |
SendMessage,
Странно, но не работает... пишет if not exist... :not-me: |
Anton04, не могу воспроизвести Вашу ошибку. Создал в папке Internet Explorer ини-файл и прописал в комстроке:
Код:
z:\iniwrite.bat "%PROGRAMFILES%\Internet Explorer\file.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts" |
SendMessage,
Видать где-то ошибся в написании %PROGRAMFILES%, переписал заново и всё пошло. Ещё раз спасибо. |
Цитата:
Задача заменить в инишнике ряд параметров, например найти в тексте слово ACTION и заменить на слово Действие. Текущий батник заменяет параметр но удаляет в строчке все что находиться после подмененного значения. Подскажите что нужно изменить в батнике? |
Подскажите, как в BCDW.ini
заменить значение 15 марта 2012 года переменной ( к примеру %date%) Скрипт amel27 в посте 13 не смог приспособить. |
Прошу пояснить скрипт amel27 в посте 13 для понимания и применения к своей задаче :)
|
Помогите решить проблему
Описание: Смысл такой что бы файл который находится в паке "D:\TEST\11111111111\84\update\script.sql" нужно скопировать и положить в каждую папку ! и если получится сделать так что бы в файле "script.sql" UPDATE DEFAULT_SETTINGS SET VALUE = '69001' WHERE NAME = 'TERMINAL_NAME'; Менять значение нашедшое к папке. К примеру: в папке 84 лежит файл "script.sql"в нем хадодится текст: "UPDATE DEFAULT_SETTINGS SET VALUE = '69001' WHERE NAME = 'TERMINAL_NAME';" и цифра которая виделана жирным менялась в соотношении названии папки.. папка "84" изменялось в фале "script.sql" значение 69001 папка "100" "script.sql" значение 69002 папка "101" "script.sql" значение 69002 и т.д.п до 254 папки Нужно перекопировать в каждую папку, и внутри файла что изменяло значение (но хотя бы для начала, что бы оно скопировало сразу в все папки) |
sanchoas, ещё раз, и, пожалуйста — по-русски.
|
sanchoas,
А по чему именно в этой теме "Изменить настройки в *.ini файле через *.bat" задали свой вопрос???!!! |
Стала такая задача: 1 файл script.txt раскидать по 250 папкам
но так что бы текст в файле менялся в периодичности с названием папки. Текст в нутри файла script.txt UPDATE DEFAULT_SETTINGS SET VALUE = '69001' WHERE NAME = 'TERMINAL_NAME'; название папки "84" изменялось в фале "script.sql" значение 69001 название папка "100" "script.sql" значение 69002 название папка "101" "script.sql" значение 69002 и т.д.п до 250 папки Можно сделать Батьник что бы он раскидал это файл по 250 папкам и изменил значение в этом файле ??? название папка "100" "script.sql" значение 69001 название папка "101" "script.sql" значение 69002 название папка "102" "script.sql" значение 69003 название папка "103" "script.sql" значение 69004 название папка "104" "script.sql" значение 69005 название папка "105" "script.sql" значение 69006 ну и так далее... |
sanchoas, делайте. Я — пас.
|
Есть файл с названием script.txt лежит в папке с названием 100. Таких папок у меня 254 и в каждой из них лежит файл "script.txt"
Текст внутри файла script.txt : UPDATE DEFAULT_SETTINGS SET VALUE = '69001' WHERE NAME = 'TERMINAL_NAME'; мне надо что бы Батьником изменить в каждом файле значение "69001" в соотношении с папкой папка 100 значение в тексте файла 69001 папка 101 значение в тексте файла 69001 папка 102 значение в тексте файла 69001 а мне нужно что бы было так: папка 100 значение в тексте файла 69001 папка 101 значение в тексте файла 69002 папка 102 значение в тексте файла 69003 и так далее... Очень горящий вопрос... помогите пожалуйста ECHO ON for /l %%i in (100,1,254) do (copy "D:\TEST\11111111111\84\update\script.sql" "D:\TEST\11111111111\%%i\update\") вот батьник путем каким я переместил во все папки один и тот же файл... может кому пригодится ( как 1 файл роскидать по папкам ) |
Прошу прощения, что занимаюсь некрофилией, но мой вопрос уместен в этой теме.
Также нуждаюсь в батнике, который бы менял 2 значения в следующем варианте текстового файла: Код:
4 29 Если брать за основу код товарища El Sanchez-а: Код:
@Echo Off |
Цитата:
Код:
For /F "Tokens=1,2* Delims=:=" %%A In ('Findstr /IN . "%PathIniFile%\%IniFile%"') Do ( Просто попробуйте заменить выделенный красным цветом знак равенства на пробел. |
Georgio,
В том то и дело, что пробовал всяко с этой командой - результат либо сокрушительный для файла, либо невыполнимый, либо заменяет все пробелы на равенство :) Поэтому решил сдаться и написать здесь вопрос. :) |
KDash, я не редактирую чужие коды, а пишу свои. Уточните постановку задачи и прикрепите архив с Вашим текстовым файлом к сообщению.
|
Мммм... даже не знаю, что ещё добавить к тому что уже написал. Начну заново.
Есть текстовой файл - file.txt . Со следующим содержанием: Код:
4 29 Этот файл по-умолчанию, всегда, находится по пути "C:\DirSYS\file.txt". |
KDash, архив просят прикладывать вовсе не случайно.
|
Цитата:
Цитата:
Ну что с Вами делать?.. Держите ("на Ваш страх и риск"): Код:
@echo off . Данный код можно использовать и для изменения любого количества других аналогичных значенй. Куда, как и что вписывать, думаю, догадаетесь. |
Вложений: 1
Возвращаюсь к предоставленному мне коду. Очень помогло это решение, спасибо. Но возникла очередная задача - сделать загрузочную дискету с этим кодом. Если просто вставлять код в Autoexec.bat или загрузится с загрузочной дискеты DOS и потом уже запустить батник с этим кодом, то команда не срабатывает, указывая на ошибку синтаксиса или плохую команду... Подскажите, что нужно дописать в autoexec.bat, config.sys, чтобы команда срабатывала при загрузке с загрузочной дискеты (флешки) MS-DOS?
|
KDash, данный код не предназначен для DOS.
|
Iska, ясно.
А можно ли сделать загрузочную дискету (флеш) не с DOS? Какая загрузочная среда сможет понять данный синтаксис? |
В чем может быть проблема батник работает только если сам создал изменяемый файл " file.ini" ... с файлом который создало сторонее приложение не работает ...
Скрытый текст
@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 |
Цитата:
|
Цитата:
https://www.upload.ee/files/7553883/sett.rar.html |
assa-as, не надо раз за разом долбиться ко мне в личку, пишите здесь.
Цитата:
|
преобразовал ANSI - прокатило :up ... но как теперь батником кодировку поменять ...
Цитата:
|
Цитата:
|
del
|
Время: 23:57. |
Время: 23:57.
© OSzone.net 2001-