我有很多日志文件,我想从中提取特定的文本,并用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。
@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
您提供的信息应该已经被编辑到您的问题中,而不是作为评论发布。
你还没有回答说,原来的解决方案依赖于“你需要的数据是字符串中的第二个字符”,你要求的输出“数字”是“ N66666“和下一个空格(或者,给出的数据,是行结束的;没有例子,在所需的字符串之外有额外的数据)
所以仍然有很多猜测。
该过程从文件读取包含目标字符串的每行,然后用空格替换字符串中的“>”和“<”,并删除任何“
然后使用标准separtors通过使用将初始化时计算的目标字符串的长度应用到ltargetstring
的子字符串方法匹配找到的每个子字符串匹配目标字符串来处理结果字符串。
如果找到的字符串的第一部分与目标匹配,则会提取并echo
该字符串的其余部分,并重复该过程,直到没有更多参数可以:process
为止。