$x = Get-Content($file)
if ($x -match("~")) {
$x -replace("~","~`n") | Out-File $file
}
这是我正在使用的代码片段。我已经调试到这一点,并且在我用自己替换字符tilda ~
之后代码没有更新,然后创建一个新行。当我将它输出到命令窗口并注释掉| Out-File $file
时,代码工作正常。当我尝试将新结果传回原始文件时,代码没有打开"解包"文件。
答案 0 :(得分:2)
更换工作正常。但是,您只插入换行符(LF,`n
),而不是Windows用于编码换行符的回车符和换行符(CR-LF,`r`n
)的组合。因此,在记事本中打开文件时看不到换行符。 PowerShell接受LF和CR-LF作为换行符编码,因此当您在那里输出文件时,您会看到正确包装的行。
将您的代码更改为此,您将获得预期的结果:
(Get-Content $file) -replace '~', "~`r`n" | Set-Content $file
答案 1 :(得分:0)
我的错误。我在上面打电话给读者方法。
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
}
}