【问题标题】:Find & Replace text within an xml file在 xml 文件中查找和替换文本
【发布时间】:2019-10-16 21:33:54
【问题描述】:

我正在尝试创建一个,它将以静默方式安装代理。安装代理后,我需要导航到代理目录并编辑一个名为 agent.xml 的文件。

agent.xml 文件如下所示:

<?xml version="1.0" encoding="utf-16"?>
<Details xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Proxy />
<ProxyDomain />
<ProxyUsername />
<ProxyPassword />
<UseNewHub>true</UseNewHub>
<Thumbprint />
<Url>https://localhost/api/</Url>
<U>agent</U>
<P />
<E1>gr\atga\rgr\zergeesfsdgfsg245325252sgsgsdfgssdgs3535353</E1>
</Details>

我正在尝试替换

<Thumbprint /> 

与此一致:

<Thumbprint>213GARFASF131231FAAAF2</Thumbprint>

谁能帮我实现一个命令来查找和替换那个指纹行?

【问题讨论】:

标签: batch-file xml batch-file replace find


【解决方案1】:

首先,this link 有很多灵活的方法。

如果你想要一个快速的方法,假设你要替换的总是&lt;Thumbprint /&gt;的形式,并且你的文件中没有!,你可以使用这个:

setlocal enabledelayedexpansion
for /f "delims=" %%a in (input.xml) do (
    set line=%%a
    echo !line:Thumbprint /=Thumbprint^>213GARFASF131231FAAF2^</Thumbprint^!>>output.xml
)

替换input.xmloutput.xml

【讨论】:

  • 您是否在agent.xml 提供的内容的第一行看到encoding="utf-16"?要处理的 XML 文件是一个 UTF-16 编码的 Unicode 文件。因此,即使 FOR 处理 UTF-16 编码的 agent.xml 并忽略所有空行,忽略所有以分号开头的行并删除两个感叹号之间的所有文本以及每个 !根据提供的 XML 内容可能没有问题,输出 XML 文件被声明为 UTF-16 编码虽然是 ANSI 编码。
  • @BDM 非常感谢。我试图用我要修改的文件名 (agent.xml) 替换 input.xml 和 output.xml 文件,这已经修改了指纹参数并且还复制了文件中的所有条目,你知道我去了哪里错了吗?
  • @Hasan:您不能同时读取和写入文件,这就是选择input.xmloutput.xml 的原因。 (事实上​​——你可以同时读取一个文件并 append ——这正是你所描述的)。写入一个新文件,然后,如果需要,将其重命名为原始名称。
猜你喜欢
  • 2014-08-17
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 2019-07-30
  • 2021-11-06
  • 1970-01-01
相关资源
最近更新 更多