2013-07-02 160 views
21

我正在創建錯誤日誌文件。這是我當前的代碼:在PowerShell中將新行寫入文本文件

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

當我Get-Content上的日誌文件,它會顯示正確,與之前的新行「本土價值」。

但是,當我在記事本中打開日誌文件時,它會在一行中顯示所有內容。我怎樣才能讓它在文本文件中插入一個新行?

回答

31

`n是換行符。記事本期望換行符被編碼爲`r`n(回車+換行符,CR-LF)。在一些有用的編輯器中打開文件(SciTE,Notepad++,UltraEdit-32,Vim,...)並將換行符轉換爲CR-LF。或者使用PowerShell:

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

如果我更改了代碼以在換行之前包含卡拉格返回,請記事本正確顯示文件? – NewPowerSheller

+0

如果您重新創建文件:是的,它應該正確顯示新創建的文件。 –

+0

我使用PowerShell v4('$ PSVersionTable.PSVersion')並使用''''r'n在使用'r'n'時創建兩個空白行| Out-File -Encode Ascii',所以我只切換到'''r',這正確地創建了一個單獨的行空間。 – user4317867

14

可以使用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 
11

它也可以換行和回車的變量賦值,然後將它們添加到PowerShell腳本中的文本:

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

試試這個;

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