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

时间:2015-03-09 08:03:32

标签: windows batch-file findstr

我正在制作一个用于运行模拟的窗口的bat文件。 然后它将在控制台中查看结果并搜索字符串“win%”。 Ftm我可以找到包括胜利在内的任何东西,但这给了我很多不合理的数据。

这就是我现在所拥有的:

command | findstr win >> file.txt

这给了我很多不确定的数据。

我想找到:

command | findstr win% >> file.txt

但是这个剂量根本起作用......

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

1 个答案:

答案 0 :(得分:1)

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

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

command | findstr win%% >> file.txt

以上内容始终有效,因为您的搜索字符串只包含一个百分比。

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

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

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

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

但是如果定义了lose,那么%lose%会扩展为该值并导致搜索错误。这可以通过在表达式中引入消失的插入符来解决。像%^lose%这样的字符串不会扩展名为lose的变量。变量扩展将包括插入符号作为名称的一部分,找不到任何内容,并保持字符串不变。之后,正常逃脱阶段将“{1}}”逃逸到自身,插入符号消失。如果定义了名为l的变量,这将失败,但这种可能性很小。

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

^lose

将字符串简单地用引号括起来更容易,因此您无需转义插入符号。

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