2013-04-28 36 views
1

我在PowerShell中下面的代碼:PowerShell的:替換文本文件 - 我知道一個更換所做出

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

它搜索一堆文件,使替換和正常工作。我需要在修改文件之前將其複製到某處。我不知道的是如何知道是否進行了替換。

我的問題是你怎麼知道它是否取代了?我是否需要單獨進行搜索(如子字符串)?顯然,無論文件中有多少行被更改,我只想進行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 
}