$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