获取内容:新行

时间:2016-06-28 12:10:44

标签: powershell powershell-v4.0

我有一个脚本:

(Get-Content .\test.xml).replace('VALUE', 'MY_VALUE') | Set-Content .\test.xml
(Get-Content .\test.xml).replace('VALUE_01', 'MY_VALUE_01') | Set-Content .\test.xml

当我在文件中看到结果时:

MY_VALUEMY_VALUE_01

是否有可能使新的行像这样:

MY_VALUE
MY_VALUE_01

XML:

<VALUE>TEST</VALUE><VALUE_01>TEST_1</VALUE_01>

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在将xml写入文件时尝试获取回车时发现此问题。我想我会添加我的解决方案,以防其他人来到这里寻找这个答案。

到目前为止唯一的答案并不理想,因为它会在标记本身中添加额外的字符,如果将xml数据用于其他任何内容,可能会产生意想不到的后果。

我认为,更好的答案是让powershell将xml视为xml并使用save方法公开xml对象。 save方法编写格式良好的xml。

$fileContents = [xml]((Get-Content .\test.xml) -replace "VALUE","VALUE01" )
$fileContents.save(.\test.xml)

如果你想在保存文件之前进行双重替换,它看起来很麻烦,但实质上只是添加另一个-replace和一对周围的括号。

$fileContents = [xml](((Get-Content .\test.xml) -replace "VALUE1","VALUE01" ) -replace "VALUE2","VALUE02")
$fileContents.save(.\test.xml)

如果你想将它作为一个衬里,它可能看起来像这样,第二个替换被删除了易读性和线长。

([xml]((Get-Content .\test.xml) -replace "VALUE","VALUE01" )).save(.\test.xml)

我个人认为,当多行开始变得复杂以便于阅读和修改时,它会更好。

答案 1 :(得分:0)

似乎我找到了解决方法:

(get-content .\test.xml) -replace 'VALUE',"`nVALUE_01" | set-content .\test.xml
(get-content .\test.xml) -replace 'VALUE_01',"`nMY_VALUE_01" | set-content .\test.xml