为什么这个“findstr”命令没有按预期运行?

Cub*_*oft 2 command-line findstr

我在编写软件时经常使用命令行程序“findstr”。它帮助我在一组子目录中快速定位包含特定字符串的所有文件。在很多情况下,使用“findstr”比其他任何东西都要快得多。今天我遇到了一个问题,我想找到字符串">,所以我运行了这个命令(我认为这是一个相当典型的转义字符串):

findstr /sic:"\">" *
Run Code Online (Sandbox Code Playgroud)

并得到这条神秘的错误消息:“文件名、目录名或卷标语法不正确。”

将其更改为:

findstr /sic:'\">' *
Run Code Online (Sandbox Code Playgroud)

工作正常。为什么我需要使用单引号而不是双引号?在我在双引号包装器中转义双引号之前,我已经运行了数百(也许数千?)个 findstr 命令,没有任何问题。是什么让这个特定的搜索字符串如此不同?

dso*_*ano 6

这里有两个级别的处理 - 首先cmd.exe是解析命令行以确定是否需要进行重定向等,然后findstr获取剩余的命令行并根据自己的规则进行自己的解析(实际上,对于各种程序通常相同)。

这篇MSDN 博客文章详细介绍了这个主题。

在我看来,由于>cmd.exe元字符,您需要的是cmd.exe转义字符,恰好是^. 例如,这个命令对我有用:

findstr /sic:"\"^>" *
Run Code Online (Sandbox Code Playgroud)