使用 findstr.exe 时,如何正确转义搜索字符串中的引号?
例子:
findstr /misc:"namespace=\"" *.cs > ns.txt
这输出到控制台,而不是我指定的文件。
我直接在命令行上执行此操作,而不是在批处理文件中,尽管这些信息也可能有用。
使用 findstr.exe 时,如何正确转义搜索字符串中的引号?
例子:
findstr /misc:"namespace=\"" *.cs > ns.txt
这输出到控制台,而不是我指定的文件。
我直接在命令行上执行此操作,而不是在批处理文件中,尽管这些信息也可能有用。
如果我错了,请纠正我,但我想我已经弄清楚了:
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
根据我的测试,正确的转义字符是反斜杠:
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"/>
这还不够吗:
findstr /misc:namespace=^" *.cs > ns.txt
?
编辑
如果您正在寻找一种"
在带引号的参数中传递字符的方法,那么它可能是(使用您的示例)
findstr /misc:"namespace=""" *.cs > ns.txt
(该"
字符在带引号的字符串中重复两次)。