在PowerShell中将新行写入文本文件

时间:2013-07-02 19:26:11

标签: powershell text newline

我正在创建错误日志文件。这是我目前的代码:

Add-Content -path $logpath $((get-date).tostring() + " Error " + $keyPath `
   + $value + " key " + $key +" expected: " + $policyValue `
   + "`n local value is: " +$localValue

当我在日志文件上Get-Content时,它会正确显示,并在“本地值”之前显示新行。

但是,当我在记事本中打开日志文件时,它会在一行中显示所有内容。我怎样才能使它在文本文件中插入新行?

5 个答案:

答案 0 :(得分:41)

`n是换行符。记事本(prior to Windows 10)要求将换行符编码为`r`n(回车符+换行符,CR-LF)。在一些有用的编辑器(SciTENotepad++UltraEdit-32Vim,...)中打开文件,并将换行符转换为CR-LF。或者使用PowerShell:

(Get-Content $logpath | Out-String) -replace "`n", "`r`n" | Out-File $logpath

答案 1 :(得分:18)

您可以使用Environment class's static NewLine property获取正确的换行符:

$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

答案 2 :(得分:14)

还可以为变量分配换行符和回车符,然后将它们附加到PowerShell脚本中的文本中:

$OFS = "`r`n"
$msg = "This is First Line" + $OFS + "This is Second Line" + $OFS
Write-Host $msg

答案 3 :(得分:3)

试试这个;

Add-Content -path $logpath @"
$((get-date).tostring()) Error $keyPath $value
key $key expected: $policyValue
local value is:  $localValue
"@

答案 4 :(得分:0)

使用 Pipe 命令时,值对我不起作用。 我创建了一个额外的 Add-Content,其中 -Value 为“” 其次是原来的Get |添加我正在尝试使用的内容。

$newfile = "C:\FilePath\Newfile.txt" 
$oldfile = "C:\FilePath\Oldfile.txt"

Add-Content -Path "$newfile" -value ""
Get-Content -Path "$oldfile | Add-Content -Path "$newfile"