获取内容:新行

Get-Content: new line

我有一个脚本:

(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>

有什么想法吗?

看来我找到了解决方案:

(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

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

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

我认为,更好的答案是让 powershell 将 xml 视为 xml 并使用 xml 对象公开的保存方法。保存方法写入格式很好的 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)

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