管道替换到新文件


$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
            }
        }

最新更新