在PowerShell中出现另一个字符串时拆分字符串

时间:2014-12-11 01:33:21

标签: powershell xml-parsing powershell-v2.0 powershell-v3.0

我有一个包含一些数据的XML文件。其中一个标签是版本标签。

我需要打开文件,将版本增加1并保存。应使用PowerShell-3自动执行。

我使用-match来获取具有版本标记的行。这条线看起来像这样:

<file version="18" date="12/24/2014" time="14:09" softwareversion="2.19.3">

接近方法:

将上面的字符串放入变量中,并使用split作为show。

$line = '<file version="18" date="12/24/2014" time="14:09" softwareversion="2.19.3">'
$line.split('file version="')

这样我就可以得到分割线,取第三个,更新其中的版本,然后将它们一起添加,然后写入文件。

分割的预期输出为:

<
file version="
18" date="12/24/2014" time="14:09" softwareversion="2.19.3">

但我得到的情况如下。

<













18    

dat    


11/15/2014

t
m    


12:03
PM




twa










2.19.3
>

如何在&#39; file version =&#34;&#39;或者如何以更简单的方式更新版本号(如果可能)?

提前致谢:)

3 个答案:

答案 0 :(得分:4)

或者你可以将它作为像这样的XML文件来使用。

$XML_CONTENT = [xml]'<file version="18" date="12/24/2014" time="14:09" softwareversion="2.19.3"></file>'
$VERSION_VALUE = [int]$XML_CONTENT.GetElementsByTagName("file").GetAttribute("version")
$XML_CONTENT.GetElementsByTagName("file").SetAttribute("version",($VERSION_VALUE + 1))
$XML_CONTENT.save("OUTPUTFILE.xml")

答案 1 :(得分:1)

String.Split()分割字符串中的每个字符。所以你得到了'f','i','l'等的分裂

Powershell -split运算符似乎可以执行您想要的操作。

PS D:\> $line -split 'file version="'
<
18" date="12/24/2014" time="14:09" softwareversion="2.19.3">

或者,如果您希望分隔符包含在结果中......

PS D:\> $line -split '(file version=")'
<
file version="
18" date="12/24/2014" time="14:09" softwareversion="2.19.3">

答案 2 :(得分:1)

如果您只想尝试更新字符串中的softwareversion="2.19.3"数字,可以像这样替换它:

$nextVersion = "2.19.4"
$line = '<file version="18" date="12/24/2014" time="14:09" softwareversion="2.19.3">'
$line = $line -replace 'softwareversion=".*"',('softwareversion="'+$nextVersion+'"')

然后只需将$line写入文件。