【问题标题】:Batch- how to parse .txt file and find words in it批处理 - 如何解析 .txt 文件并在其中查找单词
【发布时间】:2015-03-20 14:34:32
【问题描述】:

我需要逐行检查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

【问题讨论】:

  • 您可以使用findfindstr 作为第一部分。一个简单的for /f 循环应该可以处理其余部分。如果真的那么简单,您可以在第一个文件上使用for /f 并跳过中间步骤。看起来比赛很简单。
  • 我是批处理编码的新手,能否请您给我整个脚本,因为它不起作用:\ 即使我将 txt 方向更改为我的 comp 中的方向

标签: windows parsing loops batch-file text


【解决方案1】:

使用 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

【讨论】:

  • 我是批处理编码的新手,能否请您给我整个脚本,因为它不起作用:\ 即使我将 txt 方向更改为我的 comp 中的方向
【解决方案2】:
@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$"

【讨论】:

  • 这个脚本能在一个多行或只有一行的txt文件中找到模式吗?因为它不会创建包含结果的 c.txt 文件
  • 您有多种选择,但您的要求并不完全透明。 /g 选项允许您在一个文件中进行多次搜索。请参阅findstr /? 了解更多信息。
  • 我不知道为什么,但我找不到 c.txt 结果文件夹,我试图将源文件 a.txt 和 .bat 文件放在同一目录中并添加“cd C:\.. .”到批处理文件中的那个目录,但我只能看到创建的patterns.txt文件而不是结果文件c.txt。非常感谢您的帮助!
  • 你能确认findstr实际上是匹配结果吗?也许在后面的行中添加echo %ERRORLEVEL%
  • 我运行以下代码,但 patterns.txt 中除了:^yyy$ ^zzz$ 我的代码是:cd C:\Users\isaacd\Documents echo ^^yyy^$> patterns.txt echo ^^zzz^$>> patterns.txt for /F "delims=" %%a in (a.txt) do (call :checkline %%a) goto :eof :checkline @echo %1 | findstr /g:patterns.txt echo %ERRORLEVEL%>>patterns.txt if %ERRORLEVEL%==0 echo blablabla %1 >>c.txt goto :eof
猜你喜欢
  • 1970-01-01
  • 2022-01-07
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多