Powershell 管道替换为新文件

Powershell 管道替换为新文件,powershell,Powershell,这是我正在使用的代码片段。我一直调试到现在,在我将字符tilda~替换为自身并创建新行后,代码没有更新。当我将其输出到命令窗口并注释掉|out File$File时,代码工作正常。当我试图通过管道将新结果返回到原始文件时,代码不会“打开”文件。替换工作正常。但是,您只插入换行符(LF,`n),而不是Windows用于编码换行符的回车符和换行符(CR-LF,`r`n)的组合。因此,在记事本中打开文件时,不会看到换行。PowerShell接受LF和CR-LF作为换行编码,因此在那里输出文件时可以看到

这是我正在使用的代码片段。我一直调试到现在,在我将字符tilda
~
替换为自身并创建新行后,代码没有更新。当我将其输出到命令窗口并注释掉
|out File$File
时,代码工作正常。当我试图通过管道将新结果返回到原始文件时,代码不会“打开”文件。

替换工作正常。但是,您只插入换行符(LF,
`n
),而不是Windows用于编码换行符的回车符和换行符(CR-LF,
`r`n
)的组合。因此,在记事本中打开文件时,不会看到换行。PowerShell接受LF和CR-LF作为换行编码,因此在那里输出文件时可以看到正确包装的行

将代码更改为此,您将获得预期结果:

$x = Get-Content($file)
if ($x -match("~")) {
  $x -replace("~","~`n") | Out-File $file
}

我的错误。我在上面调用reader方法

(Get-Content $file) -replace '~', "~`r`n" | Set-Content $file
我需要一个数组来确定文件是否需要首先展开。如果内容占1行,则需要将其展开。如果没有,那么它就没有。我基本上使用了streamreader,它将把每一行存储为数组中的一个元素。我之前忘记关闭$reader,所以我们遇到了生产者-消费者问题,因此Out文件无法覆盖$File

固定片段:

ForEach ($file in $Path){
    $Array = @()
    $reader = new-object System.IO.StreamReader($file)

顺便说一句,$file是指向文件位置的路径,例如:C:/dir1/dir2/foo.txt您可以发布文本文件的示例吗?当然可以,它类似于:Line1*Item1*Item2~ Line2*Item3*Item4~ Line3*Item5*Item6~脚本应该在每次出现“~”时创建新行,并用“unwrapped”版本覆盖旧文件。这可能是因为引用没有传递…谢谢Ansgar,我实际上是在命令窗口中使用echo检查结果的。在我这头上的愚蠢的固定。谢谢你的回答!投票赞成有用。
if($Array.length -eq 1){
        $x = Get-Content($file)

        if($x -match("~")){
            $reader.close()
            ($x -replace("~","~`n")) | Out-File $file
            }

        }