需要在日志文件中查找文本,并使用.bat文件将以下五行发送到文本文件

时间:2013-05-30 23:58:45

标签: file batch-file echo findstr

我已经搜索了几天,但却无法找到有关我具体问题的任何内容。

我有一个日志文件,我想搜索(使用findstr)单词“Login Successful”,一旦找到这个,我想要一个时间戳,整行和接下来的五行发送到文本文件。

我玩过findstr并尝试修改我在这里找到的其他建议但是却无法找到在我的输出中包含以下五行的方法。

提前谢谢你,

埃里克

3 个答案:

答案 0 :(得分:2)

从UnxUtils下载grep http://unxutils.sourceforge.net/

运行:     grep -A 5“登录成功”[日志文件名]> output.txt的

答案 1 :(得分: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
)

答案 2 :(得分: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行通过。如果门打开,则前导行号被剥离,所需的行回显到目标文件中。