在findstr搜索字符串中转义引号

时间:2011-02-13 06:29:52

标签: batch-file escaping quotes findstr

使用findstr.exe时如何正确转义搜索字符串中的引号?

示例:

findstr /misc:"namespace=\"" *.cs > ns.txt

这将输出到控制台,而不是输出到我指定的文件。

我是直接在命令行上执行此操作,而不是实际在批处理文件中,尽管该信息也可能有用。

4 个答案:

答案 0 :(得分:7)

如果我错了,请纠正我,但我想我已经弄清楚了:

findstr.exe /misc:^"namespace=\^"^" *.cs > ns.txt

即使搜索字符串中有空格,这似乎也能提供正确的输出。它允许在同一个findstr.exe调用中的文件重定向,管道和其他文字正常工作。

我的问题中的原始命令不起作用,因为cmd.exe和findstr.exe都对"字符进行了特殊处理。我在cmd.exe的处理过程中得到了一组无与伦比的引号。

我的回答中的新命令有效,因为^"允许引号从cmd.exe传递到findstr.exe,\"告诉findstr.exe忽略该引用以进行命令处理,并且把它当作一个字符文字。

修改

嗯,我的解决方案是正确的,但它正确的原因是完全错误的。我写了一个小程序来测试它。

我发现cmd.exe在传递错误命令行时将此输入传递给程序:

test.exe /misc:namespace=" *.cs > ns.txt

正确转义字符后,cmd.exe会将此输入传递给程序(并将输出重定向到文件):

test.exe /misc:namespace=" *.cs

答案 1 :(得分:4)

找到Re: FINDSTR search for a couble quote and redirect/pipe the output

Try this: 

findstr > x.txt /S /I /M /C:"\.\"" * 

我不知道为什么会这样。

虽然不能用于管道输出。请参阅相关链接piping findstr's output

答案 2 :(得分:2)

根据我的测试,正确的转义字符是反斜杠:

c:\Temp>findstr /isc:"session id=\"59620\"" C:\Temp\logs\some*.xml
C:\Temp\logs\some_2016_11_03.xml: <session id="59620" remoteAddress="192.168.195.3:49885"/>

答案 3 :(得分:1)

这不足够吗:

findstr /misc:namespace=^" *.cs > ns.txt

修改

如果您正在搜索在引用参数中传递"字符的方法,那么它可能是(使用您的示例)

findstr /misc:"namespace=""" *.cs > ns.txt

"字符在带引号的字符串中重复两次。