【问题标题】:Rename xml filename using the value of an xml-node使用 xml 节点的值重命名 xml 文件名
【发布时间】:2015-01-11 21:32:17
【问题描述】:

我已经在论坛中搜索了一种重命名方式,但我得到了各种重命名,而不是需要的重命名。 通过批处理文件(或 PowerShell。适用于 Windows)使用其中一个节点更改 XML 文件名

我有一个名为 PO_BLABLA01_XXX.XML 的 XML 文件和 我想使用批处理文件重命名文件,使文件名为 PO 编号“12345”

所以有这个内容:

<Seller>
 <Name>POV AGING LIMITED</Name>
 <PO_No>12345</PO_NO>
 <AddressInfo>
   <agrlib:Address>ALBANY ROAD</agrlib:Address>
   <agrlib:Place>DESBOROUGH</agrlib:Place>
   <agrlib:Country>United Kingdom</agrlib:Country>
   <agrlib:Phone>9999-9999</agrlib:Phone>
 </AddressInfo>
 <VatRegNo>8888</VatRegNo>
 <BankAccount>7777</BankAccount>
</Seller>

我需要将我的文件从“PO_BLABLA01_XXX.XML”重命名为 12345.XML,即 字段的值。

任何人都可以为我指出一些亮点:) 谢谢!

【问题讨论】:

  • 什么操作系统? (这在cmd.exe 中很难,但在 Windows 上的 PowerShell 中很容易;其他操作系统具有具有不同功能的不同 shell 脚本:没有目标操作系统就很难提供帮助。)
  • 嗨,理查德。它在 Windows 中。 Powershell 也可以。我认为我们可以通过批处理来实现这一点,但如果没有,PS 可以。我只是不知道从哪里开始。

标签: xml powershell batch-file rename


【解决方案1】:

使用 PowerShell

一旦 XML 被清理(&lt;PO_No&gt; 结束标记有不同的大小写;没有为 agrlib 前缀设置命名空间):

[xml]$x = Get-Conent $InputFileName
$OutputFileName = $x.Seller.PN_No
Rename-Item -Path $InputFileNAme -NewName "$($OutputFileName).xml"

应该这样做。

【讨论】:

  • 为什么使用“$($OutputFileName).xml”而不是“$OutputFileName.xml”?
  • 谢谢@Richard。我刚刚发布了部分 XML 文件来说明我的观点,这就是它有一些错误的原因(我也会清理它)。我现在就试一试并发布结果:)。干杯!
  • @Swoogan 因为我不记得. 是否被视为标识符的一部分(就像: 一样)。
  • 使用真正的 XML 解析器是可行的方法,但如果 XML 无效(例如未定义的命名空间),则应首先解决该问题。
  • 点不是标识符的一部分(否则,您如何区分变量$foo.bar 和具有属性$foo 的变量bar?)。但即使它们是,也不需要子表达式:"${OutputFileName}.xml" 就足够了。
【解决方案2】:

如果修复 XML 不是一个选项(因为 PowerShell 将完全拒绝未定义的命名空间,并且过滤掉行可能比用另一种方式解决问题更有效),AND(这很大) 你可以保证PO_No 元素会像你在示例中那样单独在一行上,你可以抓住那一行并尝试以一种非常不智能的方式吸出标签的内容:

FOR /F "delims=<> tokens=3" %%i IN ('findstr PO_No "%XML_FILE%"') DO RENAME "%XML_FILE%" "%%~i.xml"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2014-01-28
    • 2011-09-15
    • 2015-01-25
    • 1970-01-01
    • 2021-05-20
    • 2021-08-27
    相关资源
    最近更新 更多