查找和替换字符串错误

时间:2017-07-31 12:41:25

标签: regex powershell str-replace

问题

A"查找和替换"功能是删除文件的内容而不是按预期进行。

详细

我正在使用Regex值在PowerShell中工作,并且具有一个旨在查找特定正则表达式字符串并将其替换为另一个字符串的函数。最初,该功能工作得很好;但是,现在它正在删除目标文件的所有内容并将它们保存为空文件。我已经尝试了几个小时来弄清楚出了什么问题。不幸的是,当它按预期工作时我没有保存该功能的副本,所以我没有什么可比较的,并且我的大部分故障排除都失败了。我希望另一双眼睛可以帮助发现问题。

代码:

Function StringReplace
{
   $files = GCI -path "$path\*.config" -Recurse | where-object -InputObject $_ -Pattern ([regex]::Escape($oldString)) -Quiet) -eq $true)
   foreach ($file in $files) { 
      (GC $file.PSPath) | 
      foreach-object { $_.Replace($oldString, $newString) | 
         set-content $file.PSPath 
      }
}

$oldString = "s+r/ng"
$newString = "s/R+ng"
$path = "C:\*\somefoldername"

在我的大部分故障排除过程中,我发现所有$值都符合预期;但是,在到达Get-Content时,会发生一些事情并复制$ file值,以便存储每个文件/内容大约20个副本。我不确定我做错了什么,但我非常感谢任何和所有的投入。

提前谢谢大家

1 个答案:

答案 0 :(得分:0)

显然我只需要从应用程序退一步。

对于遇到此问题的其他人来说,解决方案很简单。

在代码的“ForEach-Object”部分中,需要对其进行更改:

foreach ($file in $files) { 
  (GC $file.PSPath) | 
  foreach-object { $_.Replace($oldString, $newString) } | 
  set-content $file.PSPath

问题本身就是放置的地方。 这部分功能需要在保存内容之前结束。