如何找到等于,小于和大于的运算符

时间:2018-09-28 12:26:41

标签: batch-file

当我尝试在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>

2 个答案:

答案 0 :(得分:1)

在引号内的字符串^不能用作转义字符 1 。因此,您不需要使用\^进行两次转义,只需\就足够了(在这种情况下)。运行命令时,会将两个参数传递给FINDSTRid 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*