New*_*ler 33 powershell text newline
我正在创建一个错误日志文件.这是我目前的代码:
Add-Content -path $logpath $((get-date).tostring() + " Error " + $keyPath `
+ $value + " key " + $key +" expected: " + $policyValue `
+ "`n local value is: " +$localValue
Run Code Online (Sandbox Code Playgroud)
当我Get-Content在日志文件上时,它显示正确,新行在"本地值"之前.
但是,当我在记事本中打开日志文件时,它会在一行中显示所有内容.我怎样才能使它在文本文件中插入新行?
Ans*_*ers 46
`n是换行符.记事本(在Windows 10之前)期望将换行符编码为`r`n(回车符+换行符,CR-LF).在一些有用的编辑器(SciTE,Notepad ++,UltraEdit-32,Vim,...)中打开文件,并将换行符转换为CR-LF.或者使用PowerShell:
(Get-Content $logpath | Out-String) -replace "`n", "`r`n" | Out-File $logpath
Run Code Online (Sandbox Code Playgroud)
Aar*_*sen 19
您可以使用Environment类的静态NewLine属性来获取正确的换行符:
$errorMsg = "{0} Error {1}{2} key {3} expected: {4}{5} local value is: {6}" -f `
(Get-Date),$keyPath,$value,$key,$policyValue,([Environment]::NewLine),$localValue
Add-Content -Path $logpath $errorMsg
Run Code Online (Sandbox Code Playgroud)
rch*_*cko 14
也可以为变量分配换行符和回车符,然后将它们附加到PowerShell脚本中的文本:
$OFS = "`r`n"
$msg = "This is First Line" + $OFS + "This is Second Line" + $OFS
Write-Host $msg
Run Code Online (Sandbox Code Playgroud)