使用xml-node的值重命名xml文件名

时间:2014-11-14 13:16:56

标签: xml powershell batch-file rename

我已经在论坛中搜索了一种重命名的方式,但我得到了各种重命名,而不是所需的。 通过批处理文件(或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,即&lt; PO_NO&gt;字段。

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

2 个答案:

答案 0 :(得分:2)

使用PowerShell

清理XML后(<PO_No>结束标记具有不同的大小写;没有为agrlib前缀设置名称空间):

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

应该这样做。

答案 1 :(得分:0)

如果修复XML不是一个选项(因为PowerShell将完全不知道未定义的命名空间,过滤掉行可能比解决问题的方法更多), AND (这个很大)你可以保证PO_No元素本身就像你在例子中得到的一样,你可以抓住那一行并试图吸出标签中的内容一种非常愚蠢的方式:

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