Показать полную графическую версию : [решено] Работа с ini-файлами из CMD (BAT)
Доброе всем время суток! :smirk:
Возникла необходимость редактировать ini-файл из bat-файла. :gulp:
Кто-нибудь знает команды или утилиты для реализации сего?
P.S. Поиски по Google и Forum.OsZone не дали результатов...
Заранее благодарен.
NirCmd (http://www.b-109.info/load/3-1-0-113)
Diamond, тогда уж NirCmd: Freeware Command-Line Tool (http://www.nirsoft.net/utils/nircmd.html).
Добрый день!
Ни кто не видел программу, которая может читать данные из ini-файлов?
lorents, в принципе, можно попробовать обойтись и без сторонних утилит: ReadINI.bat (http://www.robvanderwoude.com/files/readini_nt.txt). Однако, всегда существует ненулевая вероятность наткнуться на некорректную работу с разнообразными спецсимволами. Скажем, по приведённой выше ссылке:
May fail on "special" characters like & | < > and parentheses.
Есть и другие реализации, но всё, так или иначе, упирается именно в пресловутые спецсимволы. Предусмотреть и обойти все возможные случаи практически невозможно.
Потому, я бы предложил для этого использовать какую-либо внешнюю утилиту, например: ini Tool (iniTool.exe) (http://www.optimumx.com/downloads.html#iniTool) от Optimum X (http://www.optimumx.com/index.html).
Iska, Спасибо!
К сожаление, он не понимает комментарии, есть возможность это исправить?
Я еще нашел , это же проблема IniFile (http://home.mnet-online.de/horst.muc/wbat32.htm#inifile)
К сожаление, он не понимает комментарии, »
Что именно? ReadINI.bat (http://www.robvanderwoude.com/files/readini_nt.txt) или ini Tool (iniTool.exe) (http://www.optimumx.com/downloads.html#iniTool)? Мне кажется, Вы что-то путаете…
Я делаю копию с «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 (http://www.oszone.net/go.php?url=http://home.mnet-online.de/horst.muc/wbat32.htm#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=
Iska, прощу прощения что не указал какой комментарий, меня интересует комментарий к отдельному параметру
[Section1]
var1 = значение_1 ; комментарий к отдельному параметру
var2 = значение_2
Меня интересует именно приложение.
lorents, очевидно так работает GetPrivateProfileString Function (Windows) (http://msdn.microsoft.com/en-us/library/ms724353(v=vs.85).aspx). Она не понимает подобного рода комментарии. Во всяком случае, в моих экспериментах.
Вам придётся дополнительно фильтровать вывод, например:
Содержимое 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
Iska, понятно, спасибо за все
Добрый день!
Подскажите, пожалуйста, как в initool можно получить в виде переменной значение в ini-файле
пробовал так но ничего не вышло
set chunks = initool /f:Tools\config.ini /s:png /k:chunks
хотелось бы обойтись без создания текстового файла, а потом через него загружать значение пепеременных
lorents, практически тот же код, что и в #9 (http://forum.oszone.net/post-1617900-9.html):
@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 начал поддерживать кириллицу?
…как сделать, чтобы initool начал поддерживать кириллицу? »
«iniTool.exe» поддерживает работу с кириллицей в ini-файлах, если они в кодировке ANSI (Windows-1251). Для корректного отображения результатов запроса нужно будет также переключать вывод в пакетном файле на данную кодовую страницу посредством «chcp 1251».
Iska, я тоже так сделал, сработало, но спасибо что откликнулись.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.