1

我在powershell中有以下代码:

foreach ($file in $Files)
  {            
     (Get-Content $file.PSPath) | 
      Foreach-Object {$_ -replace [regex]::escape($find), $repl} | 
      Set-Content $file.PSPath
  }

它搜索一堆文件并进行替换并且工作正常。我需要先复制文件,然后再通过将其复制到某处进行修改。我不知道如何知道是否进行了更换。

我的问题是你怎么知道它是否做了替换?我是否必须单独进行搜索(如子字符串)?显然,无论文件中更改了多少行,我都只想进行 1 次备份。如果这很重要,我不会使用通配符/正则表达式。

4

1 回答 1

1

使用-match运算符执行匹配测试。然后如果结果为真,请执行您想要的操作,例如备份文件,例如:

$esc_find = [regex]::escape($find)
$content = $file | Get-Content
if ($content -match $esc_find) {
    Copy-Item -Path $file.FullName -Destination ([IO.Path]::ChangeExtension($file, 'bak')
    $content -replace $esc_find | Set-Content -Path $file.FullName
}
于 2013-04-28T01:30:34.313 回答