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

时间:2016-01-22 19:02:46

标签: windows batch-file command-line cmd

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

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

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

  

“命令提示符,也称为cmd.exe或cmd(在其可执行文件名之后),是Windows NT,Windows CE,OS / 2和eComStation 操作系统上的命令行解释程序它是DOS和Windows 9x系统中COMMAND.COM的对应物(它也称为“MS-DOS Prompt”),类似于类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

2 个答案:

答案 0 :(得分:1)

您无需为此功能创建批处理文件。它已存在于可从任何find提示符调用的所有Windows版本的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

答案 1 :(得分: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

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