Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] *.ini (http://forum.oszone.net/showthread.php?t=336619)

VladimirVVP 10-09-2018 08:46 2830716

*.ini
 
помогите не разумному ))

в *.ini есть такая запись

Код:

[Script]
Enabled=1
[Options]
DBMS=sqlite

после DBMS=sqlite создать либо удалить подобную запись
Код:

server=F:\work\servise\liteServerSQL\sqlite.db

alpap 10-09-2018 09:57 2830734

Код:

@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


YuS_2 10-09-2018 14:34 2830756

Цитата:

Цитата VladimirVVP
после 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 2831079

и все таки я рано радовался
не получается...
Цитата:

Цитата alpap
@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 »

к сожалению в конце не нужно...

Цитата:

Цитата YuS_2
$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, просмотрел много вариантов и на этом форуме то же поискал, примеры есть но не могу врубиться как адаптировать под себя

просто я с батниками только-только сталкнулся и много еще не понимаю..

alpap 12-09-2018 22:43 2831081

Цитата:

Цитата VladimirVVP
не получается... »

Цитата:

Цитата VladimirVVP
к сожалению в конце не нужно... »

что не нужно? А что вообще нужно?
Файл 154128
Файл 154129
Как видно все работает для ваших же выше условий

Потом, воды много льете, а конкретно задачу для bat я увы не понял. Давайте четким машинным языком:
задача1
-Есть файл ini, в нем такое содержание, кодировка файла такая
-Надо в файле сделать что-то чтобы получилось вот это

задача2
-Есть файл ini, в нем теперь такое содержание, кодировка файла такая
-Надо в файле сделать что-то чтобы получилось теперь вот это

VladimirVVP 13-09-2018 03:08 2831084

ок

есть файл 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

alpap 15-09-2018 00:43 2831394

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 2831403

Большое Вам спасибо!


Время: 07:21.

Время: 07:21.
© OSzone.net 2001-