在文本文件中搜索文本并使用批处理文件在 CMD 提示符下打印

Posted

技术标签:

【中文标题】在文本文件中搜索文本并使用批处理文件在 CMD 提示符下打印【英文标题】:Search a text in a text file and print in CMD prompt using batch file 【发布时间】:2016-04-29 11:40:48 【问题描述】:

我想编写一个批处理文件 (.bat)。使用批处理文件,我想在文本文件中搜索唯一文本并将包含文本的行打印到控制台窗口中作为输出。搜索条件是用户输入。

此任务需要哪个批处理代码?

例如下面是 .txt 文件的内容。

“命令提示符,也称为 cmd.exe 或 cmd(在其可执行文件名之后),是 Windows NT、Windows CE、OS/2 和 eComStation 操作系统上的命令行解释器 . 它是 DOS 和 Windows 9x 系统中 COMMAND.COM 的对应物(在此也称为“MS-DOS 提示符”),类似于在类 Unix 系统上使用的 Unix shell。Windows 命令提示符的初始版本NT 是由 Therese Stowell 开发的。[1]"

我想使用 Windows 标准命令编写一个批处理脚本,其中用户输入搜索字符串,如 Windows CE,并且该字符串的整行在命令提示符窗口中输出。

例如在用户输入Windows CE 上,输出应该是:

is the command-line interpreter on Windows NT, Windows CE, OS/2 and eComStation

【问题讨论】:

@Mofi:您的编辑改变了问题的原始含义。在您的“改进文本”格式中,很容易看到所需的输出是 .txt 文件的第二行,但原始问题描述了一个完全不同的问题!我不知道 OP 用于从 .txt 文件中提取此类部分的搜索条件是什么,所以我向用户询问了这一点,但 IMO 修改输入数据的方式与您认为的 匹配 是搜索条件不是理解这个问题的正确方法... @Mofi:请注意,Windows 记事本无法像您的“改进文本”修改中那样显示单行文件,但从这个意义上说,原始 O​​P 的格式是完全正确的。 @Zoso619 定义存储在单行文本文件中的长段落的哪一部分在该段落中找到搜索字符串时应输出到控制台的规则是什么? 【参考方案1】:

下面的批处理文件以短语的形式将输入文件中的行分开,其中 短语 是由逗号或点分隔的字符串。

@echo off
setlocal EnableDelayedExpansion

set /P "userString=Enter the search string: "

rem Process all lines in file
for /F "delims=" %%a in (input.txt) do (
   set "line=%%a"

   rem Split all phrases in line
   call :splitPhrases

   rem Process each phrase
   for /L %%i in (1,1,!numPhrases!) do (

      rem If the user string appears in this phrase
      if "!phrase[%%i]:%userString%=!" neq "!phrase[%%i]!" (
         rem ... show it
         echo !phrase[%%i]!
      )

   )
)
goto :EOF


:splitPhrases
set "numPhrases=0"

:nextPhrase
   for /F "tokens=1* delims=.," %%a in ("!line!") do (
      set /A numPhrases+=1
      set "phrase[!numPhrases!]=%%a"
      set "line=%%b"
   )
if defined line goto nextPhrase
exit /B

输出示例:

Enter the search string: Windows CE
 Windows CE

如果您想要更好的答案,请发布更好的问题...

【讨论】:

【参考方案2】:

您无需为此功能创建批处理文件。它已经存在于所有 Windows 版本的 find 工具中,可以从任何 cmd 提示符调用。以下是有关如何使用它的一些详细信息:How to Use Find from the command prompt

根据评论进行编辑:

find 语法非常简单。您似乎知道要搜索的文件,并且知道如何提示用户输入字符串:

set /P search_string= Enter the string you would like to search for:
find "%search_string%" C:\ServiceLog%_store%.txt

【讨论】:

感谢您的回复。但它是我程序的一部分。我已经创建了代码,其中批处理文件访问受限路径并拍摄一些日志并在我的本地驱动器中创建记事本。通过相同的工具,我想编写一个用户输入的代码,它读取放置在本地的记事本,如果匹配,则根据搜索条件获取整行 然后使用所需参数从批处理文件中调用find 您能否分享我提到的上述示例的代码?我对批处理编程很陌生。感谢您的帮助。 您的示例过于笼统,尤其是因为您提到了受限路径、本地位置等。您对搜索条件的约束条件也不清楚。请发布您到目前为止编写的代码以及其中的哪些部分不起作用。这样我们就可以查看您的环境限制,并更好地了解如何解决它。 如果要打印整个文本,那么整个文本就只有一行。 cmd应该如何决定,你想看什么?

以上是关于在文本文件中搜索文本并使用批处理文件在 CMD 提示符下打印的主要内容,如果未能解决你的问题,请参考以下文章

怎么用cmd搜索出指定后缀的文件路径并将所有路径返回到一个文本中?

文本处理命令之grep搜索命令详解

文本处理工具grep常用命令

使用cmd.exe以UTF-8编码保存文本文件

cmd find 文件里面明明有相关字符串,却找不到的

jieba库中使用文本时怎么搜索