批处理 - 如何解析.text文件并在其中查找单词

时间:2015-03-20 14:34:32

标签: windows parsing loops batch-file text

我需要逐行浏览a.txt个文件,然后从中提取并复制zzzyyy字样,将它们存储在另一个b.txt文件中,而不是循环通过这些单词并创建一个如下所示的命令行:

blabla XXX

虽然XXX是在我们之前创建的b.txt文件中逐一获取的,然后才得到" zzz"和" yyy"在它。

示例:

档案a.txt

jsdfjdsfnsdj

yyy

sdfdsfsd

zzz

b.txt文件将是:

yyy

zzz

并且创建的命令将是:

blabla yyy

blabla zzz

2 个答案:

答案 0 :(得分:0)

使用 For / F 作为读取行,并使用 findstr

检查行
for /F "delims=" %%a in (a.txt) do ( call :checkline %%a )
goto :eof

:checkline 
@echo %1 |findstr /g:b.txt

if %ERRORLEVEL%==0 echo blablabla  %1 >>c.txt
ENDLOCAL

:eof

答案 1 :(得分:0)

@echo off
if exist b.txt del b.txt
for /f "delims=" %%a in (a.txt) do (
    if "%%a"=="yyy" echo blabla %%a >> b.txt
    if "%%a"=="zzz" echo blabla %%a >> b.txt
)

我认为你也可以让@ Eric的方法工作。如果您实际将搜索表达式放在模式文件中,findstr会更好。我认为他的方法应该修改以匹配整条线。

echo ^^yyy^$>  patterns.txt
echo ^^zzz^$>> patterns.txt
for /F "delims=" %%a in (a.txt) do (call :checkline %%a)
del patterns.txt
goto :eof

:checkline 
@echo %1 | findstr /g:patterns.txt
if %ERRORLEVEL%==0 echo blablabla %1 >>c.txt
goto :eof

我认为你可以使用这一行而不需要额外的模式文件麻烦。不幸的是findstr并不真正支持正则表达式的替换,但我认为这样做没问题。

@echo %1 | findstr "^yyy$ ^zzz$"