$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
我的错误。我在上面调用了读者方法。
ForEach ($file in $Path){
$Array = @()
$reader = new-object System.IO.StreamReader($file)
我需要一个数组来确定文件是否需要首先解开包装。如果内容占据 1 行,则需要解开包装。如果不是,那么它就没有。我基本上使用了流阅读器,它将每行存储为数组中的一个元素。我之前忘了关闭$reader,所以我们遇到了生产者-消费者问题,因此 Out-File 无法覆盖$file。
修复片段:
if($Array.length -eq 1){
$x = Get-Content($file)
if($x -match("~")){
$reader.close()
($x -replace("~","~`n")) | Out-File $file
}
}