Findstr输出格式

时间:2015-02-20 16:26:41

标签: windows batch-file cmd findstr

我有很多日志文件,我想从中提取特定文本并使用FINDSTR命令将其复制到新文件,

例如:我有一个名为1.log的日志文件,我需要提取日志文件中以N66666行开头的所有数字,如下所示:

22220473400664->473400664
 01210260222->01210260222->N8888801210260222 
 01278448231->01278448231->N6666601278448231
 01286799109->01286799109->N8888801286799109

我试过了:

findstr /s /i "\<N66666.*" *.* > results.txt

但结果是将从N6666开始的整行复制到results.txt,我需要将这些数字复制到results.txt。

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "targetstring=N66666"
FOR /f "tokens=3delims=>" %%a IN ('findstr /s /i "%targetstring%.*" *.*') DO ECHO(%%a

GOTO :EOF

这可能是有用的 - 您提供的信息很短。

它依赖于您所需的数据,即所需行中第二个>字符后的字符串;我没有将结果重定向到文件,因为这是一个微不足道的修改。


根据进一步的信息:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "targetstring=N66666"
SET /a ltargetstring=0
SET "output=%targetstring%"
:dtslp
SET /a ltargetstring+=1
SET "output=%output:~1%"
IF DEFINED output GOTO dtslp
FOR /f "delims=" %%a IN ('findstr /s /i "%targetstring%.*" *.*') DO (
 SET "line=%%a"
 SET "line=!line:>= !"
 SET "line=!line:<= !"
 SET "line=!line:"=!"
 CALL :process !line!
)

GOTO :EOF
:process
SET "output=%1"
IF NOT DEFINED output GOTO :EOF 
CALL SET "output=%%output:~0,%ltargetstring%%%"
IF /i "%output%" neq "%targetstring%" GOTO miss
SET "output=%1"
CALL SET "output=%%output:~%ltargetstring%%%"
ECHO(%output%

:miss
SHIFT
GOTO process

您提供的信息应该已经编辑到您的问题中,而不是作为评论发布。

您还没有回答原始解决方案依赖于“您所需的数据是在所需行中的第二个&gt;字符后的字符串中”您已声明所需的输出“数字”是在“N66666”和下一个空格之间(或者,如果提供了数据,则为行尾;没有示例在超出所需字符串的行上有额外数据)

所以还有很多猜测。

此过程从文件中读取包含目标字符串的每一行,然后替换ech“&gt;”和“&lt;”在带有空格的字符串中删除任何

然后使用标准separtor处理结果字符串,方法是使用子字符串方法将找到的每个子字符串与目标字符串匹配,将初始化时计算的目标字符串的长度应用到ltargetstring

如果找到的字符串的第一部分与目标匹配,则提取字符串的其余部分并echo编辑并重复该过程,直到:process没有其他参数为止。