FIND 命令
要在 Windows 命令提示符或批处理文件中搜索多个文件中的文本,可以使用 FIND 命令,该命令自 MS DOS 时代起就已存在,至今仍可在 Windows 11 中使用。它类似于 Unix 中的 grep
命令,但不支持正则表达式。如果想在当前目录搜索单词 borogoves
,请遵循以下语法:
find "borogoves" *
注意,模式周围的引号是必需的。如果使用 PowerShell,还需要包含单引号:
find '"borogoves"' *
你可以用 *.htm?
这样的文件掩码代替星号 (*
)。find
命令会显示它扫描的文件名,即使这些文件中没有找到匹配项:
默认情况下,搜索是 区分大小写 的,因此通常需要添加 /I
开关以将大小写字母视为等效:
find /I "<a href=" *.htm
如果不指定要搜索的文件,find
将等待从 stdin 输入文本,以便你可以从另一个命令的输出管道输入。例如,可以列出 Windows 中支持的所有复制命令:
help | find /i "copy"
另一个开关 /V
,允许你查找所有不包含模式的行,类似于 grep -v
命令。
在 批处理文件 中,你可以利用 find
命令在未找到模式时将退出代码 (errorlevel) 设置为 1 的事实。例如,可以检查机器运行的是 64 位还是 32 位的 Windows 版本:
@echo off rem Based on KB556009 with some corrections reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" /v "Identifier" | find /i "x86 Family" > nul if errorlevel 1 goto win64 echo 32-bit Windows goto :eof :win64 rem Could be AMD64 or ARM64 echo 64-bit Windows
FINDSTR命令:正则表达式搜索
如果您需要查找正则表达式,请尝试使用在Windows XP中引入的FINDSTR
命令。由于历史原因,findstr仅支持正则表达式的有限子集,因此您只能使用这些正则表达式功能:
- 点号
.
匹配除换行符和扩展ASCII字符外的任何字符。 - 字符列表
[abc]
匹配指定字符中的任何一个(a
、b
或c
)。 - 字符列表范围
[a-z]
匹配从a
到z
的任何字母。 - 星号(
*
)表示前一个字符可以重复零次或多次。 \<
和\>
符号标记单词的开头和结尾。- 插入符号(
^
)和美元符号($
)表示行的开头和结尾。 - 反斜杠(
\
)转义任何元字符,允许您查找字面字符。例如,\$
查找的是美元符号本身。
Findstr不支持字符类(\d
)、交替(|
)或其他重复项(+
或{5}
)。
基本语法与FIND
命令相同:
findstr "\<20[0-9][0-9]\>" *.htm
此命令会在当前目录下的.htm
文件中查找所有以2000开头的年份。与find
类似,使用/I
开关进行不区分大小写的搜索:
FINDSTR的限制与特性
字符列表[a-z]
始终不区分大小写,因此echo ABC | findstr "[a-z]"
会匹配。
空格字符在findstr
中作为交替元字符工作,所以像findstr "new shoes" *
这样的搜索查询将找到包含new
或shoes
的所有行。不幸的是,无法转义空格并将其用作正则表达式中的实际字符。例如,无法查找以空格开头的行。
正则表达式中的语法错误会被忽略。例如,findstr "[" *
将匹配包含[
字符的所有行。
如果文件包含Unix换行符(LF),则$
元字符不能正确工作。如果文件的最后一行缺少行终止符,findstr
将无法找到它。例如,findstr "</html>$" *
在</html>后没有CR+LF的情况下将无法正常工作。
早期的Windows版本对find和findstr等命令的行长度有限制。最近的版本取消了这些限制,所以您不再需要担心这个问题。有关findstr的限制和错误,特别是在早期的Windows版本中,请参考这个StackOverflow问题
。findstr命令在OEM(MS DOS)代码页中运行;点元字符不匹配任何扩展ASCII字符。因此,该命令对非英文文本的搜索不太有用。此外,您无法搜索Unicode字符(UTF-8或UTF-16)。
结论
您可以通过键入findstr /?
或find /?
来了解其他开关。例如,附加开关允许您在子目录中搜索或打印行号。您也可以参考官方文档
。总的来说,find
和findstr
命令已经过时,并具有各种奇怪和限制的问题。
Source:
https://dzone.com/articles/search-from-the-windows-command-prompt