使用批处理文件在.txt文件中搜索双字

时间:2016-05-27 16:16:11

标签: windows batch-file duplicates findstr

我在google上做了一些研究,以便在我的问题上找到答案 我发现的唯一的东西也是类似的,我的问题是在这个网站上: Search for a word inside .txt file using batch file

我创建了一个批处理文件,正在创建一个包含8行的.txt文件:

  

您好

     

伴侣

     

如何

     

     

     

否则

     

再见

     

再见

我想创建一个批处理文件,可以检测此文件中文本文件中的双字,它必须检测Bye

在批处理文件中也生成了带有8行的.txt文件,我想让它检测文本文件中的双字Bye,经过一些研究后我得出结论,这一定是可能的与findstr

findtr检测到Bye字出现两次吗?

在我的档案中,我希望得到这样的报告

在您创建的文本文件中回显%isn&t;或者有%的双字 所以我想将findstr的结果放入变量%isn&t;或者有%

很抱歉,如果这是一个糟糕的问题,但我是stackoverflow和im dutch的新手:/ (很多用谷歌翻译翻译的文字) 你能解释一下这是一个不好的问题,我怎么能让你更清楚

2 个答案:

答案 0 :(得分:1)

这是开始的事情:

@echo off
for /f %%i in (t.txt) do for /f %%a in ('type t.txt^|findstr /x "%%i"^|find /v /c "" ') do if %%a gtr 1 echo %%i

findstr无法计算,因此我们必须使用find /c作为帮助

有关详细信息,请参阅find /?findstr /?for /?

答案 1 :(得分:1)

斯蒂芬的答案有效,但它会在每次重复的单词中打印出它出现的次数。它也相当低效,为文件中的每一行读取整个文件一次。

这是一个相当简单的纯批处理解决方案,只打印出每个复制字一次。如果您使用SORT将所有重复项组合在一起,则任务会更加简单。但是,Windows SORT命令忽略大小写,因此IF也必须忽略大小写。此解决方案仅读取文件两次,无论大小,一次用于SORT,一次用于FOR / F.

@echo off
setlocal enableDelayedExpansion

set "prev="
set "dup="
for /f "delims=" %%W in ('sort test.txt') do (
  if /i %%W==!prev! (
    if not defined dup echo(%%W
    set dup=1
  ) else set "dup="
  set "prev=%%W"
)

如果您希望单词比较区分大小写,则上述算法需要区分大小写的SORT例程。我写过JSORT.BAT来做这件事(除此之外)。它是纯脚本(混合JScript /批处理),可在Windows上本机运行。

但是如果您愿意使用JScrpt /批处理混合,那么如果您添加JREPL.BAT regular expression find/replace utility,解决方案就会变得非常简单。 /M选项允许我在换行符中搜索重复的单词。

jsort test.txt | jrepl "^(.+)$(\r?\n\1$)+" $1 /jmatch /m

启动JScript引擎需要很长的初始化时间,因此如果文件较小,此解决方案比纯批处理解决方案慢一点。但是如果文件很大,那么这比纯批处理解决方案要快得多。