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

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

alex_sov 11-08-2015 11:01 2539912

помощь в написание bat файла - обработка лога
 
Вложений: 2
Всем привет.
Не очень силен в написание, поэтому нужна ваша помощь.
Есть лог файл типа:

Querying target system called:

8.8.8.8

TCP port 53 (domain service): LISTENING

Querying target system called:

93.158.134.3

TCP port 53 (domain service): FILTERED

Querying target system called:

93.158.134.3

Необходимо сделать из него примерно следующее:
8.8.8.8 TCP port 53 (domain service): LISTENING
93.158.134.3 TCP port 53 (domain service): FILTERED
93.158.134.3 TCP port 25 (smtp service): LISTENING

Iska 11-08-2015 11:06 2539918

Цитата:

Цитата alex_sov
Есть лог файл типа: »

Упакуйте файл в архив, прикрепите последний к сообщению или выложите на RGhost.

Iska 11-08-2015 11:46 2539939

alex_sov, выложенный «log.7z» — пустой.

alex_sov 11-08-2015 11:51 2539942

Iska, прошу прощения. Поправил

Iska 11-08-2015 13:15 2539978

alex_sov, попробуйте так:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=log.txt
set sDestFile=log_обработанный.txt

call :GetTemporaryName

if defined sSourceFile (
        if exist "%sSourceFile%" (
                type "%sSourceFile%" | >"%TemporaryName%" findstr.exe /i /r /c:"[0-9]\.[0-9]" /c:"TCP port"
                for /f "usebackq delims=" %%i in (
                        `type "%TemporaryName%" ^| find.exe /c /v ""`
                ) do set /a iCount = %%~i / 2
                        echo [!iCount!]
                <"%TemporaryName%" >"%sDestFile%" (
                        for /l %%i in (1, 1, !iCount!) do (
                                set /p sVar1=
                                set /p sVar2=
                                echo !sVar1: =! !sVar2!
                        )
                )
                del /f /q "%TemporaryName%"
        ) else (
                echo Can't find source file [%sSourceFile%].
                exit /b 2
        )
) else (
        echo Usage: %~nx0 ^<Source file^>
        exit /b 1
)

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem ==========================================================================
:GetTemporaryName
        setlocal enableextensions enabledelayedexpansion
       
:NextName
        set sTempName=%temp%\temp%random%.tmp
       
        if exist "%sTempName%" goto :NextName
       
        set sProcName=%~0
       
        endlocal & set %sProcName:~4%=%sTempName%
        exit /b 0
rem ==========================================================================


alex_sov 11-08-2015 13:39 2539993

Iska, ты просто царь и бог, спасибо огромное :)

Опиум 13-08-2015 15:48 2541179

а это, вывод команды portqry на этапе создания лога никак не оптимизируется?

Foreigner 13-08-2015 15:54 2541185

Опиум, В качестве предположения, попробуйте с помощью PowerShell:
Код:

[string] (portqry | sls '\d+') -split '\s{2}' -replace '^\s' | sc log.txt

Опиум 13-08-2015 16:27 2541207

Foreigner, )


Время: 00:14.

Время: 00:14.
© OSzone.net 2001-