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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Батник для парсинга и вывода на экран (http://forum.oszone.net/showthread.php?t=291593)

GromfBaenre@twitter 25-11-2014 14:51 2435284

Батник для парсинга и вывода на экран
 
Вложений: 1
Аудирую ПК с разными версиями Windows, начиная от 2000, домена нет, VBScript запрещен, поэтому выбор пал на парсинга вывода AIDA64 Business, XML я не осилил, поэтому решено было парсить INI-файл.

Скрипт должен брать строки (tokens=1, %%i) из params.dat, находить аналогичную в Report.ini (тоже tokens=1, %%j), в случаев совпадения выдать из файла Reports.ini всю строку в консоль. Архив со своими трудами прилагаю.

Georgio 25-11-2014 20:38 2435485

Код:

@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 2435791

Georgio, спасибо. На самом деле первый всё-таки нравится больше, шире возможности кастомизации вывода.

GromfBaenre@twitter 09-12-2014 13:57 2441767

Скрипт мой ширится, но напрямую 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 2441795

Решил проблемы собственным мозгом, выглядит так:
Код:

@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



Время: 02:52.

Время: 02:52.
© OSzone.net 2001-