PDA

Показать полную графическую версию : [решено] Работа с ini-файлами из CMD (BAT)


Jeeb
06-07-2009, 19:54
Доброе всем время суток! :smirk:

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

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

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

Diamond
06-07-2009, 20:30
NirCmd (http://www.b-109.info/load/3-1-0-113)

Iska
06-07-2009, 20:48
Diamond, тогда уж NirCmd: Freeware Command-Line Tool (http://www.nirsoft.net/utils/nircmd.html).

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

Iska
20-02-2011, 16:38
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).

lorents
20-02-2011, 17:35
Iska, Спасибо!
К сожаление, он не понимает комментарии, есть возможность это исправить?
Я еще нашел , это же проблема IniFile (http://home.mnet-online.de/horst.muc/wbat32.htm#inifile)

Iska
20-02-2011, 18:15
К сожаление, он не понимает комментарии, »
Что именно? 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=

lorents
20-02-2011, 18:35
Iska, прощу прощения что не указал какой комментарий, меня интересует комментарий к отдельному параметру
[Section1]
var1 = значение_1 ; комментарий к отдельному параметру
var2 = значение_2


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

Iska
20-02-2011, 21:01
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

lorents
20-02-2011, 21:46
Iska, понятно, спасибо за все

lorents
06-03-2011, 15:55
Добрый день!
Подскажите, пожалуйста, как в initool можно получить в виде переменной значение в ini-файле
пробовал так но ничего не вышло
set chunks = initool /f:Tools\config.ini /s:png /k:chunks
хотелось бы обойтись без создания текстового файла, а потом через него загружать значение пепеременных

Iska
06-03-2011, 16:30
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

lorents
06-03-2011, 16:36
Iska, у меня значение chunks записано Remove all, если я использую Ваш код, то мне выдает только значение Remove
как это можно исправить?

Iska
06-03-2011, 17:27
Забыл об этом. 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
Iska, спасибо большое

lorents
24-04-2011, 17:43
Подскажите, пожалуйста, как сделать, чтобы initool начал поддерживать кириллицу?

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

lorents
30-04-2011, 21:31
Iska, я тоже так сделал, сработало, но спасибо что откликнулись.




© OSzone.net 2001-2012