Powershell:替换文本文件 - 知道已进行替换

时间:2013-04-28 00:59:03

标签: powershell

我在powershell中有以下代码:

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

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

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

1 个答案:

答案 0 :(得分:1)

使用-match运算符执行匹配测试。然后,如果结果为true,则执行所需的操作,例如备份文件,例如:

$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
}