$x = Get-Content($file)
if ($x -match("~")) {
$x -replace("~","~`n") | Out-File $file
}
這是我正在使用的代碼片段。我已經調試到這一點,並且在我用自己替換字符tilda ~
然後創建一個新行後代碼沒有更新。當我輸出它到命令窗口並註釋掉| Out-File $file
代碼工作正常。當我嘗試將新結果傳回原始文件時,代碼不會「解開」文件。管道替換爲新文件
$x = Get-Content($file)
if ($x -match("~")) {
$x -replace("~","~`n") | Out-File $file
}
這是我正在使用的代碼片段。我已經調試到這一點,並且在我用自己替換字符tilda ~
然後創建一個新行後代碼沒有更新。當我輸出它到命令窗口並註釋掉| Out-File $file
代碼工作正常。當我嘗試將新結果傳回原始文件時,代碼不會「解開」文件。管道替換爲新文件
更換工作得很好。但是,您只插入了換行字符(LF,`n
),而不是Windows用於編碼換行符的回車換行和換行符(CR-LF,`r`n
)的組合。因此,在記事本中打開文件時看不到換行符。 PowerShell同時接受LF和CR-LF作爲換行符編碼,因此當您在那裏輸出文件時,您會看到正確包裝的行。
你的代碼改成這樣,你會得到預期的結果:
(Get-Content $file) -replace '~', "~`r`n" | Set-Content $file
謝謝Ansgar,我實際上是使用echo在命令窗口中檢查結果。愚蠢的修復我的結局。謝謝你的回答! Upvoted有用。 – UserX
我的錯。我上面打電話給讀者方法。
ForEach ($file in $Path){
$Array = @()
$reader = new-object System.IO.StreamReader($file)
我需要一個數組來確定文件是否需要解包才能開始。如果內容佔用1行,則需要解包。如果不是,那麼它沒有。我基本上使用了streamreader,它將把每行存儲爲數組中的一個元素。我之前忘記關閉$ reader,所以我們有生產者 - 消費者問題,因此Out-File無法覆蓋$ file。
固定段:
if($Array.length -eq 1){
$x = Get-Content($file)
if($x -match("~")){
$reader.close()
($x -replace("~","~`n")) | Out-File $file
}
}
順便說$文件的文件路徑位置,如:你能後的文本文件的樣本/dir1/dir2/foo.txt – UserX
:C? – ConanW
Sure Conan,它會是這樣的:Line1 * Item1 * Item2〜Line2 * Item3 * Item4〜Line3 * Item5 * Item6〜 – UserX