当我使用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
Try this:
findstr > x.txt /S /I /M /C:"\.\"" *
我不知道为什么这个有效。
但是对于输出进行管道传输无效。请参阅相关链接piping findstr's output
根据我的测试,正确的转义字符是反斜杠:
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
(在引号字符串中,"
字符被重复两次)。
findstr /c:"this is ""a test""" blah.txt
,当blah.txt只包含行this is "a test"
时。当涉及到空格时,双引号并不能解决问题。 - Merlyn Morgan-Graham""""
(四个双引号连续)将一个双引号作为参数传递给被调用的程序,这正是我所需要的。 - We Are All Monica无论是findstr程序还是您正在使用的shell,都必须对它们进行转义处理。 https://ss64.com/nt/findstr-escapes.html
因此,如果从powershell运行,您的示例将是
findstr /misc:"namespace=\`"" *.cs > ns.txt