私は数日間検索してきましたが、私の特定の質問に関して何も見つかりませんでした.
「Login Successful」という単語を (findstr を使用して) 検索したいログ ファイルがあります。これが見つかったら、タイム スタンプ、その行全体と次の 5 行をテキスト ファイルに送信します。
私は findstr をいじって、ここで見つけた他の提案を変更しようとしましたが、出力に次の 5 行を含める方法を見つけることができませんでした。
前もって感謝します、
エリック
私は数日間検索してきましたが、私の特定の質問に関して何も見つかりませんでした.
「Login Successful」という単語を (findstr を使用して) 検索したいログ ファイルがあります。これが見つかったら、タイム スタンプ、その行全体と次の 5 行をテキスト ファイルに送信します。
私は findstr をいじって、ここで見つけた他の提案を変更しようとしましたが、出力に次の 5 行を含める方法を見つけることができませんでした。
前もって感謝します、
エリック
@echo off
setlocal EnableDelayedExpansion
rem Look for the line with "Login Successful" and output it
(for /F "tokens=1* delims=:" %%a in ('findstr /N "Login Successful" theFile.log') do (
set skip=%%a
echo %date% @ %time%
echo %%b
)) > textFile.txt
rem Add the next five lines
set lines=0
for /F "skip=%skip% tokens=1* delims=:" %%a in ('findstr /N "^" theFile.log') do (
echo %%b>> textFile.txt
set /A lines+=1
if !lines! equ 5 goto :EOF
)
@ECHO OFF
SETLOCAL
SET /a gate=0
(
FOR /f "delims=" %%i IN ('type logfile.txt^|findstr /n "$" ') DO (
SET "line=%%i"
CALL :process
)
)>report.txt
GOTO :eof
:process
IF %gate% gtr 0 GOTO output
ECHO(%line%|FINDSTR /i /c:"login successful" >NUL
IF ERRORLEVEL 1 GOTO :EOF
SET /a gate=6
:output
SET /a gate -=1
SET "line=%line:*:=%"
ECHO(%line%
GOTO :eof
次の 5 行のいずれかが空であるかどうかはわからないため、このfindstr/n
メソッドを使用して空行を再現します。
基本的に、ターゲット文字列が見つかった場合 (大文字と小文字を区別しないと想定しています)、ゲートを開いて 6 行を通過できるようにします。ゲートが開いている場合、先頭の行番号が取り除かれ、必要な行が宛先ファイルにエコーされます。