当我尝试在txt文件中找到以下行时,显示错误FINDSTR:无法打开value =“ e app46707.xml。如何在文件中转义equal(=)符号?
FINDSTR "id type=\^"eLocator\^" value=\^"e" app46707.txt
app46707.txt
<idGroup>
<id type="unit" value="APP46707"/>
<id type="eLocator" value="e46707"/>
</idGroup>
答案 0 :(得分:1)
在引号内的字符串^
不能用作转义字符 1 。因此,您不需要使用\^
进行两次转义,只需\
就足够了(在这种情况下)。运行命令时,会将两个参数传递给FINDSTR
:id type=\^eLocator"
和value="e app46707.txt
这就是为什么您看到
FINDSTR:无法打开value =“ e app46707.txt
错误,因为没有名为value="e app46707.txt
的文件。除FINDSTR
外,默认情况下还会搜索多个单词。 FINDSTR "abc xyz"
将找到包含“ abc”或“ xyz”的任何行。要查找带空格的文字字符串,必须使用/C:
选项。解决以上所有问题后,该命令将按预期运行
D:\>FINDSTR /c:"id type=\"eLocator\" value=\"e" app46707.txt
<id type="eLocator" value="e46707"/>
但是那样就非常脆弱,因为当在xml标记中插入更多空格或制表符,或者将"
更改为'
,或者标记被分成多行时,它将断开。此外,使用cmd转义是一团糟,很难修复。 PowerShell具有更规则的引用规则,并且它支持.NET框架中可用的所有内容,因此它已经具有解析xml文件的本机功能。只需使用Select-Xml
,它将基于XPath query
PS D:\> Select-Xml -Path .\app46707.txt -XPath '//id[@type="eLocator"]'
Node Path Pattern
---- ---- -------
id D:\app46707.txt //id[@type="eLocator"]
1 来自How does the Windows Command Interpreter (CMD.EXE) parse scripts?
如果它是引号(
"
),则切换引号,如果引号处于活动状态,则以下特殊字符不再特殊:^ & | < > ( )
。
答案 1 :(得分:0)
尝试一下:
findstr /s /i /n /p /c:"=" *app46707.txt*