使用批处理文件在 .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 引擎的初始化时间很长,因此如果文件很小,此解决方案比纯批处理解决方案慢一点。但是如果文件很大,那么这比纯批处理解决方案要快得多。
我对 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 引擎的初始化时间很长,因此如果文件很小,此解决方案比纯批处理解决方案慢一点。但是如果文件很大,那么这比纯批处理解决方案要快得多。