Работа с ini-файлами из CMD (BAT)
Доброе всем время суток! :smirk:
Возникла необходимость редактировать ini-файл из bat-файла. :gulp:
Кто-нибудь знает команды или утилиты для реализации сего?
P.S. Поиски по Google и Forum.OsZone не дали результатов...
Заранее благодарен.
|
Добрый день!
Ни кто не видел программу, которая может читать данные из ini-файлов?
|
lorents, в принципе, можно попробовать обойтись и без сторонних утилит: ReadINI.bat. Однако, всегда существует ненулевая вероятность наткнуться на некорректную работу с разнообразными спецсимволами. Скажем, по приведённой выше ссылке:
Цитата:
May fail on "special" characters like & | < > and parentheses.
|
Есть и другие реализации, но всё, так или иначе, упирается именно в пресловутые спецсимволы. Предусмотреть и обойти все возможные случаи практически невозможно.
Потому, я бы предложил для этого использовать какую-либо внешнюю утилиту, например: ini Tool (iniTool.exe) от Optimum X.
|
Iska, Спасибо!
К сожаление, он не понимает комментарии, есть возможность это исправить?
Я еще нашел , это же проблема IniFile
|
Цитата:
Цитата 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"
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"
Что у Вас из этого не работает?
Приведённый Вами 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"
|
Iska, прощу прощения что не указал какой комментарий, меня интересует комментарий к отдельному параметру
Код:
[Section1]
var1 = значение_1 ; комментарий к отдельному параметру
var2 = значение_2
Меня интересует именно приложение.
|
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
|
Iska, понятно, спасибо за все
|
Добрый день!
Подскажите, пожалуйста, как в initool можно получить в виде переменной значение в ini-файле
пробовал так но ничего не вышло
Код:
set chunks = initool /f:Tools\config.ini /s:png /k:chunks
хотелось бы обойтись без создания текстового файла, а потом через него загружать значение пепеременных
|
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
|
Iska, у меня значение chunks записано Remove all, если я использую Ваш код, то мне выдает только значение Remove
как это можно исправить?
|
Забыл об этом. 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
|
Подскажите, пожалуйста, как сделать, чтобы initool начал поддерживать кириллицу?
|
Цитата:
Цитата lorents
…как сделать, чтобы initool начал поддерживать кириллицу? »
|
«iniTool.exe» поддерживает работу с кириллицей в ini-файлах, если они в кодировке ANSI (Windows-1251). Для корректного отображения результатов запроса нужно будет также переключать вывод в пакетном файле на данную кодовую страницу посредством «chcp 1251».
|
Iska, я тоже так сделал, сработало, но спасибо что откликнулись.
|
Время: 03:06.
© OSzone.net 2001-