Показать полную графическую версию : [решено] *.ini
VladimirVVP
10-09-2018, 08:46
помогите не разумному ))
в *.ini есть такая запись
[Script]
Enabled=1
[Options]
DBMS=sqlite
после DBMS=sqlite создать либо удалить подобную запись
server=F:\work\servise\liteServerSQL\sqlite.db
@echo off
set "Z=server=F:\work\servise\liteServerSQL\sqlite.db"
:: Добавить строку в конец файла "file.ini"
>>file.ini echo %Z%
:: Удалить указанную строку из файла "file.ini"
<file.ini>$ (for /f "delims=" %%a in ('find /n /v "%Z%"') do @set "s=%%a"& cmd /v/c echo[!s:*]^^=!)& >nul move $ file.ini
pause
после DBMS=sqlite создать либо удалить подобную запись »
если параметр server присутствовать может только непосредственно за DBMS, то:
powershell
$file = 'test.ini'
$r = 'server=F:\\work\\servise\\liteServerSQL\\sqlite.db'
$reg1_1 = "(DBMS\s*=\s*sqlite)\s*"+"$r"
$reg1_2 = "(DBMS\s*=\s*sqlite)(\s*)"
$reg2_1 = '$1'
$reg2_2 = '$1$2'+"$($r -replace '\\\\','\')"+'$2'
if (($a = gc $file -raw) -match $reg1_1){$a -replace $reg1_1,$reg2_1|sc $file -non} else {$a -replace $reg1_2,$reg2_2|sc $file -non}
но должно быть однозначное либо присутствие, либо отсутствие параметра server в сочетании с параметром DBMS, причем везде, т.е. если в одном .ini присутствует сразу оба варианта сочетания параметров, то всегда будет срабатывать только на удаление параметра server, добавлять ничего не будет.
VladimirVVP
12-09-2018, 22:28
и все таки я рано радовался
не получается...
@echo off
set "Z=server=F:\work\servise\liteServerSQL\sqlite.db"
:: Добавить строку в конец файла "file.ini"
>>file.ini echo %Z%
:: Удалить указанную строку из файла "file.ini"
<file.ini>$ (for /f "delims=" %%a in ('find /n /v "%Z%"') do @set "s=%%a"& cmd /v/c echo[!s:*]^^=!)& >nul move $ file.ini
pause »
к сожалению в конце не нужно...
$file = 'test.ini'
$r = 'server=F:\\work\\servise\\liteServerSQL\\sqlite.db'
$reg1_1 = "(DBMS\s*=\s*sqlite)\s*"+"$r"
$reg1_2 = "(DBMS\s*=\s*sqlite)(\s*)"
$reg2_1 = '$1'
$reg2_2 = '$1$2'+"$($r -replace '\\\\','\')"+'$2'
if (($a = gc $file -raw) -match $reg1_1){$a -replace $reg1_1,$reg2_1|sc $file -non} else {$a -replace $reg1_2,$reg2_2|sc $file -non} »
а этот почему-то не срабатывает....
я папробовал такой вариант
@echo off
setlocal enabledelayedexpansion
Set infile=test.ini
Set find=server
Set replace=server=%~dp0liteServerSQL\sqlite.db
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=, eol=#" %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
Echo !TMPR!>>TMP.TXT
)
move TMP.TXT %infile%
но он не заменяет а постоянно дабавляет путь к файлу и получается такая ерунда
server=F:\work\servise\liteServerSQL\sqlite.db=F:\work\servise\liteserver=F:\work\servise\liteServer SQL\sqlite.dbSQL\sqlite.db=F:\work\servise\liteserver=F:\work\servise\liteServerSQL\sqlite.db=F:\wor k\servise\liteserver=F:\work\servise\liteServerSQL\sqlite.dbSQL\sqlite.dbSQL\sqlite.db
в общем суть вот в чем...
в программе пользователь сам выбирает в каком каталоге разместить
значение передается в bat и тот должен в указанном каталоге создать папку liteServerSQL и переместить туда sqlite.db
а выбранный путь нужно записать в seting.ini
это можно и в программе сделать, но есть но, папке liteServerSQL нужно открыть общий доступ, чего не возможно сделать из программы по этому я и использую bat и соотвественно хотел передать в него весь этот процес, что бы не занимать прорамму кодом..
но походу это не получится .. потому сделаю так
пользователь в программе выбирает папку для размещения
параметр записывается в setting.ini
после запускаем программно этот самый батник
батник берет значение из setting.ini и проделывает уже известные действия
и опять не понимаю как мне получить это значение
server=F:\work\servise\liteServerSQL\sqlite.db
из ini, просмотрел много вариантов и на этом форуме то же поискал, примеры есть но не могу врубиться как адаптировать под себя
просто я с батниками только-только сталкнулся и много еще не понимаю..
не получается... »
к сожалению в конце не нужно... »
что не нужно? А что вообще нужно?
154128
154129
Как видно все работает для ваших же выше условий
Потом, воды много льете, а конкретно задачу для bat я увы не понял. Давайте четким машинным языком:
задача1
-Есть файл ini, в нем такое содержание, кодировка файла такая
-Надо в файле сделать что-то чтобы получилось вот это
задача2
-Есть файл ini, в нем теперь такое содержание, кодировка файла такая
-Надо в файле сделать что-то чтобы получилось теперь вот это
VladimirVVP
13-09-2018, 03:08
ок
есть файл setting.ini содержание файла:
[Script]
Enabled=1
[Options]
DBMS=sqlite
server=F:\work\service\
[Grids]
frmServiceCen.tgList.ColCount=5
frmServiceCen.tgList.0=87
frmServiceCen.tgList.1=80
frmServiceCen.tgList.2=84
frmServiceCen.tgList.3=71
Файл в кадировке ANSI
в корневой папке батника находится sqlite.db
нужно получить значение параметра server то есть F:\work\service\
в полученом адресе нужно создать папку liteServerSQL, открыть к этой папке общий доступ и скапировать в нее sqlite.db
VladimirVVP,
если файлы: setting.ini и sqlite.db в одной директории с bat, то:
@echo off
set "fz=setting.ini"
set "z=server"
set "fcp=sqlite.db"
set "dsh=liteServerSQL"
setlocal enabledelayedexpansion
<"%fz%" (for /f "delims=" %%a in ('find /i "%z%"') do @set "%%a")
if not exist "!%z%!%dsh%" md "!%z%!%dsh%"
net share %dsh%="!%z%!%dsh%"
cmd /c takeown /f "!%z%!%dsh%" /r /d y && icacls "!%z%!%dsh%" /grant Administrators:F /t
copy "%fcp%" "!%z%!%dsh%"
endlocal
pause
VladimirVVP
15-09-2018, 08:13
Большое Вам спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.