PowerShell中使用Get-Content读取文本并在MessageBox保留换行
解决PowerShell MessageBox保留文本换行的问题
我来帮你搞定这个换行不显示的问题~ 你现在遇到的问题是因为Get-Content默认会把文本文件的每一行作为数组的一个元素返回,直接把这个数组传给MessageBox.Show()的话,PowerShell会自动把数组元素用空格拼接成一个字符串,自然就丢失了原来的换行格式。
下面给你两种可行的解决方案:
方案1:使用-Raw参数读取文件(推荐,PowerShell 3.0+支持)
-Raw参数会直接把整个文件内容读取成单个包含原始换行符的字符串,这样传给MessageBox就能完美保留换行:
Add-Type -AssemblyName PresentationCore,PresentationFramework $ButtonType = [System.Windows.MessageBoxButton]::OK $MessageIcon = [System.Windows.MessageBoxImage]::Information # 用-Raw读取正文,保留换行 $MessageBody = Get-Content -Path "$PSScriptRoot\text_body.txt" -Raw # 标题一般不需要换行,不过如果你的标题文件有特殊格式也可以加-Raw $MessageTitle = Get-Content -Path "$PSScriptRoot\text_title.txt" -Raw # 补全你之前没写完的Show方法参数 $Result = [System.Windows.MessageBox]::Show($MessageBody, $MessageTitle, $ButtonType, $MessageIcon)
方案2:手动拼接换行符(兼容旧版PowerShell)
如果你的PowerShell版本低于3.0,没有-Raw参数,可以用-join把数组元素用系统换行符连接起来:
Add-Type -AssemblyName PresentationCore,PresentationFramework $ButtonType = [System.Windows.MessageBoxButton]::OK $MessageIcon = [System.Windows.MessageBoxImage]::Information # 读取行数组后,用系统换行符拼接成带换行的字符串 $MessageBody = (Get-Content -Path "$PSScriptRoot\text_body.txt") -join [Environment]::NewLine $MessageTitle = Get-Content -Path "$PSScriptRoot\text_title.txt" -join [Environment]::NewLine $Result = [System.Windows.MessageBox]::Show($MessageBody, $MessageTitle, $ButtonType, $MessageIcon)
另外要注意:MessageBox的标题栏是不支持换行的,所以即使标题文件里有换行,显示的时候也会被忽略,所以标题部分其实可以不用处理换行,直接取第一行或者原样读取都可以~
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

