Powershell替换添加空行

时间:2017-08-03 15:49:20

标签: powershell scripting

我有这个powershell代码,它应该用新字符串替换目录中每个文件中每个字符串的出现。 这样可行,但最后会添加一个空行。 造成这种情况的原因是什么,以及如何很好地避免这种情况?

$files = Get-ChildItem $currentDir *.* -recurse
foreach ($file in $files)
    {
    $find = "placeholder"
    $replace = "newvalue"
    $content = Get-Content $($file.FullName) -Raw
    $content -replace $find,$replace | Out-File $($file.FullName) 
    }

简单地删除最后一行不是一个好的解决方案,因为有时候我的文件将包含一个我想要保留的空行。

2 个答案:

答案 0 :(得分:2)

您可以使用-NoNewline参数来阻止Out-File在文件末尾添加额外的行。

$content -replace $find,$replace | Out-File $($file.FullName) -NoNewline

注意:这是在PowerShell 5.0中添加的

答案 1 :(得分:0)

我仅限于PS版本4,这就是我使用的

$ files = Get-ChildItem $ currentDir -recurse

$find = "placeholder"
$replace = ""newvalue"    

foreach ($file in $files)
    {
    $content = Get-Content $($file.FullName) -Raw | ForEach-Object { $_ -replace $find,$replace}
    $content = $content -join "`r`n"

    $content | Set-Content  $($file.FullName)      
    }

请注意,这仅在将完整文件存储在内存中时才有效。