0

私は数日間検索してきましたが、私の特定の質問に関して何も見つかりませんでした.

「Login Successful」という単語を (findstr を使用して) 検索したいログ ファイルがあります。これが見つかったら、タイム スタンプ、その行全体と次の 5 行をテキスト ファイルに送信します。

私は findstr をいじって、ここで見つけた他の提案を変更しようとしましたが、出力に次の 5 行を含める方法を見つけることができませんでした。

前もって感謝します、

エリック

4

3 に答える 3

1
@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
)
于 2013-05-31T13:08:15.927 に答える
0
@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 行を通過できるようにします。ゲートが開いている場合、先頭の行番号が取り除かれ、必要な行が宛先ファイルにエコーされます。

于 2013-05-31T01:57:18.777 に答える