使用Batch编辑XML属性

时间:2016-07-04 00:14:42

标签: xml batch-file

我想知道如何编辑XML文件中的特定属性。

我要编辑的属性如下所示:
 <Data key="serial">912487015087068085841514</Data>
我希望该文件将值设置为随机 24 位数。

1 个答案:

答案 0 :(得分:0)

PowerShell非常擅长处理XML数据。我发布这个是为了避免使用sed,jrepl.bat或其他文本操作工具的建议。 XML应该作为分层对象处理。

<# : batch portion
@echo off & setlocal

set "xmlfile=test.xml"

powershell -noprofile "iex (${%~f0} | out-string)"

goto :EOF
: end batch / begin PowerShell hybrid code #>

function rnd([int]$digits) {
    $x = foreach ($i in 1..$digits) { get-random -min 0 -max 9 }
    $x -join ''
}

[xml]$xml = gc $env:xmlfile
$xml.SelectSingleNode('//Data[@key="serial"]/text()').data = rnd 24
$xml.Save($env:xmlfile)

如果您愿意,可以更改rnd()函数以生成24个十六进制字符(0-9和a-f),以获得更多随机性。

function rnd([int]$digits) {
    $x = foreach ($i in 1..$digits) { (get-random -min 0 -max 16).toString('x') }
    $x -join ''
}

...或者您可以从每个字母数字字符中生成更多内容。

function rnd([int]$digits) {
    $x = foreach ($i in 1..$digits) { [char](48..57 + 65..90 + 97..122 | get-random) }
    $x -join ''
}

但是rnd()功能在某种程度上重新发明了轮子。您可以使用.NET的GUID类来生成大量随机性。

$xml.SelectSingleNode('//Data[@key="serial"]/text()').data = [guid]::NewGuid()