使用get-content读取htm文件,进行修改用set-content写回后,莫名在最后多了个空行


PowerShell交流中心分类: Powershell基础使用get-content读取htm文件,进行修改用set-content写回后,莫名在最后多了个空行
0
DJ asked 6 年 ago

我使用get-content读取一个htm文件,$str = Get-Content $htm -Encoding UTF8 | Out-String,之后对文件中的内容进行了部分替换$str = $str.Replace($oldLink,$newLink),$str = $str.Replace($oldHeading,$newHeading),但是我对天发誓我没有在最后加一个空行,然再写回htm,Set-Content -Path $htm -Value $str -Encoding UTF8 -Force, 之后我用beyondcompare比较替换前和替换后的,却发现替换后的htm文件最后有一个空行。我不明白最后的这个空行是从哪来的,这个问题已经困扰我很久了!~~!谁能帮帮我

DJ replied 6 年 ago

加了-nonewline确实好使,但我还是有个问题,就是如果我但是读取的时候如果不加out-string,那它就会把读取出的文件一行一行的生成一个数组,那在最后的set-content时候好像即使不加-nonewline,也是没有空行的。

1 Answers
1
Best Answer
zbluesky answered 6 年 ago

PowerShell Set-Content命令会默认添加新的一行,请参考如下微软blog:
set-content adds newlines by default
https://blogs.msdn.microsoft.com/jmanning/2007/05/23/powershell-gotcha-of-the-day-set-content-adds-newlines-by-default/
 
如果使用的是WMF5.0的话,可以使用参数 -NoNewline来改变此行为。参考如下:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-content?view=powershell-5.1
 
Hope it helps.

Mooser Lee 管理员 replied 6 年 ago

正解。如果遇到低版本,可以直接用.NET方法替代。
[io.file]::WriteAllText(“a.html”,$ctt,[System.Text.Encoding]::UTF8)

KiYouMi replied 3 年 ago

-NoNewLine命令好像不怎么好用,只需要最后一行不需要空行,但是我用ForEach修改每行,Set-Content输出的时候加了-NoNewLine,却把所有的行变成一个单行!