Показать полную графическую версию : Батник для парсинга и вывода на экран
GromfBaenre@twitter
25-11-2014, 14:51
Аудирую ПК с разными версиями Windows, начиная от 2000, домена нет, VBScript запрещен, поэтому выбор пал на парсинга вывода AIDA64 Business, XML я не осилил, поэтому решено было парсить INI-файл.
Скрипт должен брать строки (tokens=1, %%i) из params.dat, находить аналогичную в Report.ini (тоже tokens=1, %%j), в случаев совпадения выдать из файла Reports.ini всю строку в консоль. Архив со своими трудами прилагаю.
@echo off
for /f "usebackq delims==" %%i in ("params.dat") do (
for /f "usebackq tokens=1* delims==" %%j in ("Report.ini") do (
if /i "%%i"=="%%j" echo %%j=%%k
)
)
pause>nul
или
@findstr /bilg:"params.dat" "Report.ini"& pause>nul
.
Думаю, что второй вариант Вам больше понравится:)...
GromfBaenre@twitter
26-11-2014, 13:19
Georgio, спасибо. На самом деле первый всё-таки нравится больше, шире возможности кастомизации вывода.
GromfBaenre@twitter
09-12-2014, 13:57
Скрипт мой ширится, но напрямую break или next %%i не нашел в for, подскажите пожалуйста, каким методом лучше реализовать?
@echo off
echo NETBIOS Host Name=%computername%
.\bin\AIDA64Business\aida64.exe /R .\reports\$HOSTNAME_1.ini /INI /CUSTOM .\xx.rpf
.\bin\iconv\bin\iconv.exe -f CP1251 -t UTF-8 .\reports\%computername%_1.ini > .\reports\report_out.ini
chcp 65001
for /f "usebackq delims==" %%i in ("params.dat") do (
for /f "usebackq tokens=1* delims==" %%j in (".\reports\report_out.ini") do (
if /i "%%i"=="%%j" (
echo %%j=%%k
)
)
)
pause>nul
Для кого-то быть можем будет полезным вариант решения проблем кодировок. Можно расширить функционал с помощью другой утилиты, которая определяет текущую кодировку файла.
GromfBaenre@twitter
09-12-2014, 14:48
Решил проблемы собственным мозгом, выглядит так:
@echo off
Setlocal EnableDelayedExpansion
echo NETBIOS Host Name=%computername%
rem .\bin\AIDA64Business\aida64.exe /R .\reports\$HOSTNAME_1.ini /INI /CUSTOM .\xx.rpf
.\bin\iconv\bin\iconv.exe -f CP1251 -t UTF-8 .\reports\%computername%_1.ini > .\reports\report_out.ini
chcp 65001
for /f "usebackq delims==" %%i in ("params.dat") do (
set bool=false
for /f "usebackq tokens=1* delims==" %%j in (".\reports\report_out.ini") do (
if /i "!bool!" == "false" (
if /i "%%i"=="%%j" (
echo %%j=%%k
set bool=true
)
)
)
)
pause>nul
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.