Mer*_*ham 8 quotes escaping batch-file findstr
使用findstr.exe时,如何正确转义搜索字符串中的引号?
例:
findstr /misc:"namespace=\"" *.cs > ns.txt
Run Code Online (Sandbox Code Playgroud)
这将输出到控制台,而不是输出到我指定的文件.
我直接在命令行上执行此操作,而不是实际在批处理文件中,尽管该信息也可能有用.
如果我错了请纠正我,但我想我已经弄明白了:
findstr.exe /misc:^"namespace=\^"^" *.cs > ns.txt
Run Code Online (Sandbox Code Playgroud)
即使您的搜索字符串中有空格,这似乎也能提供正确的输出.它允许在同一个findstr.exe调用中的文件重定向,管道和其他文字正常工作.
我的问题中的原始命令不起作用,因为cmd.exe和findstr.exe都对该"字符进行了特殊处理.我在cmd.exe的处理中得到了一组无与伦比的引号.
我的回答中的新命令有效,因为^"允许引号从cmd.exe传递到findstr.exe,并\"告诉findstr.exe忽略该命令以进行命令处理,并将其视为字符文字.
编辑:
好吧,我的解决方案是正确的,但它正确的原因是完全错误的.我写了一个小程序来测试它.
我发现当我传递错误的命令行时,cmd.exe将此输入传递给程序:
test.exe /misc:namespace=" *.cs > ns.txt
Run Code Online (Sandbox Code Playgroud)
正确转义字符后,cmd.exe将此输入传递给程序(并将输出重定向到文件):
test.exe /misc:namespace=" *.cs
Run Code Online (Sandbox Code Playgroud)
Try this:
findstr > x.txt /S /I /M /C:"\.\"" *
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会这样。
但是不适用于管道输出。查看相关的链接管道findstr的输出