PowerShell 技能连载 - 读取多行文本

适用于 PowerShell 3.0 及以上版本

有些时候您偶然会见到类似这样的技巧:

$FilePath = "$env:SystemRoot\WindowsUpdate.log"

$ContentsWithLinebreaks = (Get-Content $FilePath) -join "`r`n"

您能否出猜出它的用意?Get-Content 缺省情况下返回由一行一行组成的字符串数组,然后 -join 操作符将该数组转化为一个字符串。

从 PowerShell 3.0 开始,Get-Content 多了一个参数:-Raw。它比起刚才的方法高效的多,并且可以得到相同的结果:

$FilePath = "$env:SystemRoot\WindowsUpdate.log"

$ContentsWithLinebreaks = (Get-Content $FilePath) -join "`r`n"

$ContentsWithLinebreaks2 = Get-Content $FilePath -Raw

$ContentsWithLinebreaks -eq $ContentsWithLinebreaks2

当您使用这段代码时,会发现 $ontentWithLinebreaks$ContentWithLinebreaks2 是不同的。唯一的区别是在 $ContentsWithLinebreaks2 尾部有一个换行符:

PS> $ContentsWithLinebreaks -eq $ContentsWithLinebreaks2.TrimEnd("`r`n")
True

PS>

PowerShell 技能连载 - 读取多行文本

http://blog.vichamp.com/2015/01/23/reading-multiline-text/

作者

吴波

发布于

2015-01-23

更新于

2022-07-06

许可协议

评论