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

Search for a double word inside .txt file using batch file

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

我创建了一个批处理文件,它创建了一个包含 8 行的 .txt 文件,如下所示:

Hello

Mate

How

Are

You

Doing

Bye

Bye

我想制作一个批处理文件,可以检测该文件中文本文件中的双字,它必须检测 Bye

在也用 8 行制作 .txt 文件的批处理文件中,我想让它检测文本文件中的双字 Bye,经过一番研究,我得出的结论是,这必须findstr 是可能的。

能否findtr检测到Bye这个词出现了两次?

在我的文件中,我希望获得这样的报告

在您创建的文本文件中回显%不是或有%一个双字 所以我想将 findstr 的结果放入变量 %isn't or there is%

抱歉,如果这是一个糟糕的问题,但我是 Whosebug 的新手,我是荷兰人:/ (很多文本用 google translate 翻译) 如果这是一个糟糕的问题,你能解释一下我如何才能让你更清楚吗

这里有一些事情要开始:

@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 /?

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

这是一个相当简单的纯批处理解决方案,它只打印出每个复制单词一次。如果您使用 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 来做到这一点(除其他外)。它是在 Windows.

上本地运行的纯脚本(混合 JScript/batch)

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

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

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