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

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

Jeeb 06-07-2009 19:54 1160449

Работа с ini-файлами из CMD (BAT)
 
Доброе всем время суток! :smirk:

Возникла необходимость редактировать ini-файл из bat-файла. :gulp:
Кто-нибудь знает команды или утилиты для реализации сего?

P.S. Поиски по Google и Forum.OsZone не дали результатов...

Заранее благодарен.

Diamond 06-07-2009 20:30 1160487

NirCmd

Iska 06-07-2009 20:48 1160499

Diamond, тогда уж NirCmd: Freeware Command-Line Tool.

lorents 20-02-2011 15:15 1617639

Добрый день!
Ни кто не видел программу, которая может читать данные из ini-файлов?

Iska 20-02-2011 16:38 1617700

lorents, в принципе, можно попробовать обойтись и без сторонних утилит: ReadINI.bat. Однако, всегда существует ненулевая вероятность наткнуться на некорректную работу с разнообразными спецсимволами. Скажем, по приведённой выше ссылке:
Цитата:

May fail on "special" characters like & | < > and parentheses.
Есть и другие реализации, но всё, так или иначе, упирается именно в пресловутые спецсимволы. Предусмотреть и обойти все возможные случаи практически невозможно.

Потому, я бы предложил для этого использовать какую-либо внешнюю утилиту, например: ini Tool (iniTool.exe) от Optimum X.

lorents 20-02-2011 17:35 1617750

Iska, Спасибо!
К сожаление, он не понимает комментарии, есть возможность это исправить?
Я еще нашел , это же проблема IniFile

Iska 20-02-2011 18:15 1617781

Цитата:

Цитата lorents
К сожаление, он не понимает комментарии, »

Что именно? ReadINI.bat или ini Tool (iniTool.exe)? Мне кажется, Вы что-то путаете…
читать дальше »
Я делаю копию с «C:\WINDOWS\win.ini» как «C:\WINDOWS\win2.ini» и работаю с последним.

Содержимое C:\WINDOWS\win2.ini:
Код:

; for 16-bit app support
[fonts]
[extensions]
[mci extensions]
[files]
[Mail]
MAPI=1
CMCDLLNAME32=mapi32.dll
CMCDLLNAME=mapi.dll

Например, читаю содержимое параметра «CMCDLLNAME32» секции «Mail».

iniTool.exe:
Код:

"E:\Песочница\0034\iniTool.exe" /f:"C:\WINDOWS\win2.ini" /s:"Mail" /k:"CMCDLLNAME32"
Цитата:

Код:

mapi32.dll

ReadINI.bat:
Код:

"E:\Песочница\0034\ReadINI.bat" "C:\WINDOWS\win2.ini" "Mail" "CMCDLLNAME32"
Цитата:

Код:


"C:\WINDOWS\win2.ini"
[Mail]
CMCDLLNAME32=mapi32.dll


Теперь комментирую параметр «CMCDLLNAME32» секции «Mail» — содержимое C:\WINDOWS\win2.ini будет выглядеть как:
Код:

; for 16-bit app support
[fonts]
[extensions]
[mci extensions]
[files]
[Mail]
MAPI=1
;CMCDLLNAME32=mapi32.dll
CMCDLLNAME=mapi.dll

Затем снова пробую прочитать содержимое параметра «CMCDLLNAME32» секции «Mail».

iniTool.exe:
Код:

"E:\Песочница\0034\iniTool.exe" /f:"C:\WINDOWS\win2.ini" /s:"Mail" /k:"CMCDLLNAME32"
Цитата:

Код:

The data requested was not found.

ReadINI.bat:
Код:

"E:\Песочница\0034\ReadINI.bat" "C:\WINDOWS\win2.ini" "Mail" "CMCDLLNAME32"
Цитата:

Код:


INI key not found



Что у Вас из этого не работает?

Приведённый Вами IniFile тоже корректно работает (вывод у него, конечно, своеобразный ;)).
читать дальше »

Читаю содержимое параметра «CMCDLLNAME32» секции «Mail».

inifile.exe:
Код:

"E:\Песочница\0034\inifile.exe" "C:\WINDOWS\win2.ini" [Mail] "CMCDLLNAME32"
Цитата:

Код:

set CMCDLLNAME32=mapi32.dll

Опять комментирую параметр «CMCDLLNAME32» секции «Mail» и пробую прочитать содержимое параметра.

inifile.exe:
Код:

"E:\Песочница\0034\inifile.exe" "C:\WINDOWS\win2.ini" [Mail] "CMCDLLNAME32"
Цитата:

Код:

set CMCDLLNAME32=


lorents 20-02-2011 18:35 1617792

Iska, прощу прощения что не указал какой комментарий, меня интересует комментарий к отдельному параметру
Код:

[Section1]
var1 = значение_1 ; комментарий к отдельному параметру
var2 = значение_2

Меня интересует именно приложение.

Iska 20-02-2011 21:01 1617900

lorents, очевидно так работает GetPrivateProfileString Function (Windows). Она не понимает подобного рода комментарии. Во всяком случае, в моих экспериментах.

Вам придётся дополнительно фильтровать вывод, например:
читать дальше »
Содержимое C:\WINDOWS\win2.ini:
Код:

; for 16-bit app support
[fonts]
[extensions]
[mci extensions]
[files]
[Mail]
MAPI=1
CMCDLLNAME32=mapi32.dll; some comment
CMCDLLNAME=mapi.dll

Читаем содержимое параметра «CMCDLLNAME32» секции «Mail» с помощью «iniTool.exe»:
Код:

@echo off
setlocal

for /f "delims=;" %%i in ('""E:\Песочница\0034\iniTool.exe" /f:"C:\WINDOWS\win2.ini" /s:"Mail" /k:"CMCDLLNAME32""') do set sCMCDLLNAME32=%%i

if defined sCMCDLLNAME32 echo %sCMCDLLNAME32%

endlocal
exit /b 0

Цитата:

Код:

mapi32.dll


lorents 20-02-2011 21:46 1617933

Iska, понятно, спасибо за все

lorents 06-03-2011 15:55 1628624

Добрый день!
Подскажите, пожалуйста, как в initool можно получить в виде переменной значение в ini-файле
пробовал так но ничего не вышло
Код:

set chunks = initool /f:Tools\config.ini /s:png /k:chunks
хотелось бы обойтись без создания текстового файла, а потом через него загружать значение пепеременных

Iska 06-03-2011 16:30 1628673

lorents, практически тот же код, что и в #9:
Код:

@echo off
setlocal

for /f %%i in ('""C:\Program Files\ini Tool\iniTool.exe" /f:".\Tools\config.ini" /s:"png" /k:"chunks""') do set chunks=%%i

if defined chunks echo %chunks%

endlocal
exit /b 0


lorents 06-03-2011 16:36 1628684

Iska, у меня значение chunks записано Remove all, если я использую Ваш код, то мне выдает только значение Remove
как это можно исправить?

Iska 06-03-2011 17:27 1628733

Забыл об этом. lorents, попробуйте так:
Код:

@echo off
setlocal

for /f "tokens=*" %%i in ('""C:\Program Files\ini Tool\iniTool.exe" /f:".\Tools\config.ini" /s:"png" /k:"chunks""') do set chunks=%%i

if defined chunks echo %chunks%

endlocal
exit /b 0


lorents 06-03-2011 18:19 1628767

Iska, спасибо большое

lorents 24-04-2011 17:43 1664954

Подскажите, пожалуйста, как сделать, чтобы initool начал поддерживать кириллицу?

Iska 30-04-2011 21:24 1668194

Цитата:

Цитата lorents
…как сделать, чтобы initool начал поддерживать кириллицу? »

«iniTool.exe» поддерживает работу с кириллицей в ini-файлах, если они в кодировке ANSI (Windows-1251). Для корректного отображения результатов запроса нужно будет также переключать вывод в пакетном файле на данную кодовую страницу посредством «chcp 1251».

lorents 30-04-2011 21:31 1668199

Iska, я тоже так сделал, сработало, но спасибо что откликнулись.


Время: 03:06.

Время: 03:06.
© OSzone.net 2001-