使用 findstr 查找包含 "%" 的字符串

Find string which include "%" with findstr

我正在为 windows 制作一个 bat 文件,它将 运行 进行模拟。 然后它将在控制台中查看结果并搜索字符串 "win%"。 Ftm 我可以找到任何东西,包括 win,但这给了我很多不必要的数据。

这是我现在得到的:

command | findstr win >> file.txt

这给了我很多不必要的数据。

我要查找:

command | findstr win% >> file.txt

但是这个剂量根本没用....

如何找到包含“%”的字符串?

Br

根据您的问题标签,您的命令出现在批处理脚本中。

百分比文字必须在批处理脚本中转义为 %%

command | findstr win%% >> file.txt

以上将始终有效,因为您的搜索字符串仅包含百分之一。

请注意,管道的每一侧都使用命令行上下文(不是批处理)在自己的 cmd.exe 进程中执行。这可能会导致问题,具体取决于您的搜索字符串和当前定义的变量。

假设您要搜索 win%lose%。以下 可能 有效:

command | findstr win%%lose%% >>file.txt

只要环境中没有名为 lose 的变量,它就可以工作。由于 FINDSTR 命令在命令行上下文中执行,因此如果未定义 lose,则会保留 %lose% 字符串。

但如果定义了 lose,则 %lose% 会扩展为该值,您会得到错误的搜索结果。这可以通过在表达式中引入消失的插入符号来解决。像 %^lose% 这样的字符串不会扩展名为 lose 的变量。变量扩展将包含插入符号作为名称的一部分,不会找到任何内容,并保持字符串不变。之后,正常的转义阶段将 "escape" l 变成自身,插入符号消失。现在,如果定义了一个名为 ^lose 的变量,这将失败,但这是极不可能的。

但是该命令在批处理脚本中,因此插入符号必须转义。

command | findstr win%%^^lose%% >> file.txt

简单地将字符串括在引号中会更容易,这样您就不需要转义插入符号了。

command | findstr "win%%^lose%%" >> file.txt