我有这个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)
}
简单地删除最后一行不是一个好的解决方案,因为有时候我的文件将包含一个我想要保留的空行。
答案 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)
}
请注意,这仅在将完整文件存储在内存中时才有效。