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 命令,没有任何问题。是什么让这个特定的搜索字符串如此不同?
这里有两个级别的处理 - 首先cmd.exe是解析命令行以确定是否需要进行重定向等,然后findstr获取剩余的命令行并根据自己的规则进行自己的解析(实际上,对于各种程序通常相同)。
这篇MSDN 博客文章详细介绍了这个主题。
在我看来,由于>是cmd.exe元字符,您需要的是cmd.exe转义字符,恰好是^. 例如,这个命令对我有用:
findstr /sic:"\"^>" *
Run Code Online (Sandbox Code Playgroud)