Показать полную графическую версию : Изменить настройки в *.ini файле через *.bat
volk1234
14-08-2011, 22:52
текст батника
@Echo Off
CALL :REPLINE "drwu.ini" "Autostart=" "Autostart=1"
CALL :REPLINE "drwu.ini" "Destination=" "Destination=.\DrWebUP"
: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
текст инишника
[DrWU]
Language=Russian
Boot=0
AutoUpdate=1
Autostart =0
ExitAfterUpdate=
UseMethod=1
UpdateMethod=0
FTPPassive=0
UpdateTXT=1
UpdateInterval=120
EnableAdditionalPath=0
Source=
UseProxy=0
Proxy=
Destination=.\DrWebUP
ЗЫ. Запостил сообщение и заметил ошибку, параметр autostart отделен пробелом от значения- это уже я эксперементировал и пробовал с пробелом и без...
Убрал в ини файле и ваш совет помог- если сделать пробел между %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"
Но для этого нужно вычислить с начало переменную и подставить его в значение...
SendMessage
16-08-2011, 00:40
Anton04, ну и напиши CALL :REPLINE "operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts"
%PROGRAMFILES% является переменной среды и уже прописана.
%PROGRAMFILES% является переменной среды и уже прописана. »
хм.... действительно, а я то думал что нужно ещё вычислить её... Спасибо за разъяснение. :beer2:
Так теперь хочется немного универсальности, что бы можно было запускать прямо из командной строки типа:
edit_ini_file.cmd "%PROGRAMFILES%\Opera\profile\scripts\operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts"
т.е. прописывать путь к файлу в котором менять и что менять не редактируя сам скрипт.
Кто поможет в реализации? :help:
SendMessage
16-08-2011, 12:40
Так теперь хочется немного универсальности, что бы можно было запускать прямо из командной строки типа:
edit_ini_file.cmd "%PROGRAMFILES%\Opera\profile\scripts\operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts"
т.е. прописывать путь к файлу в котором менять и что менять не редактируя сам скрипт. »
Заменить строку 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:
SendMessage
16-08-2011, 15:40
Anton04, не могу воспроизвести Вашу ошибку. Создал в папке Internet Explorer ини-файл и прописал в комстроке:z:\iniwrite.bat "%PROGRAMFILES%\Internet Explorer\file.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts" Все отрабатывает нормально.
SendMessage,
Видать где-то ошибся в написании %PROGRAMFILES%, переписал заново и всё пошло. Ещё раз спасибо.
коль пошла такая пьянка, до кучи еще вариант:
Код:
@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
------- »
Отличный батник, все работает, хочу прикрутить его под свою задачку.
Задача заменить в инишнике ряд параметров, например найти в тексте слово ACTION и заменить на слово Действие. Текущий батник заменяет параметр но удаляет в строчке все что находиться после подмененного значения. Подскажите что нужно изменить в батнике?
Подскажите, как в BCDW.ini часть ini:
[MenuItems]
:; *** Описания вариантов загрузки
C:\ ; Загрузка с жесткого диска ; ^ Продолжение загрузки с жесткого диска
\i386\setuplda.bin ; Автоматическая установка Windows XP 2012 ; Автоматическая установка Windows XP SP3 2012 Pro ^ с обновлениями по 15 марта 2012 года, драйверами и программами
\i386\setupldr.bin ; Ручная установка Windows XP 2012 ( с консолью восстановления ) ; Ручная установка Windows XP SP3 2012 Pro с обновлениями по 15 марта 2012 года ^ Во время установки введите свой лицензионный ключ
....
заменить значение 15 марта 2012 года переменной ( к примеру %date%) Скрипт amel27 в посте 13 не смог приспособить.
Прошу пояснить скрипт amel27 в посте 13 для понимания и применения к своей задаче :)
sanchoas
23-07-2013, 15: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, ещё раз, и, пожалуйста — по-русски.
zavoruev
23-07-2013, 15:40
sanchoas,
А по чему именно в этой теме "Изменить настройки в *.ini файле через *.bat" задали свой вопрос???!!!
sanchoas
23-07-2013, 15:47
Стала такая задача: 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, делайте. Я — пас.
sanchoas
23-07-2013, 16:29
Есть файл с названием 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
5 50978
130
131 10107
132 201204
133 1
134 1
То есть 2 строки: 131 и 132, изменяемое значение вручную: 10107 и 201204
Если брать за основу код товарища El Sanchez-а:@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
то он вполне подходит, только если бы после 131 стояло =, но у меня пробел. Подскажите, пожалуйста, что нужно поменять, чтобы код работал в моих условиях!
код товарища El Sanchez-а » не изучал, но логично предположить, что то, что Вам надо, здесь: For /F "Tokens=1,2* Delims=:=" %%A In ('Findstr /IN . "%PathIniFile%\%IniFile%"') Do (.
Просто попробуйте заменить выделенный красным цветом знак равенства на пробел.
Georgio,
В том то и дело, что пробовал всяко с этой командой - результат либо сокрушительный для файла, либо невыполнимый, либо заменяет все пробелы на равенство :)
Поэтому решил сдаться и написать здесь вопрос. :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.