我在powershell中有以下代码:
foreach ($file in $Files)
{
(Get-Content $file.PSPath) |
Foreach-Object {$_ -replace [regex]::escape($find), $repl} |
Set-Content $file.PSPath
}
它搜索一堆文件并进行替换并正常工作。我需要先复制文件,然后再将其复制到某处。我不知道的是如何知道是否更换了。
我的问题是你怎么知道它是否取代了?我是否必须单独进行搜索(如子字符串)?显然,无论文件中有多少行被更改,我只想进行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
}