正则表达式替换引号中的字符串路径

regex replace string path in quotes

你好,我在很多服务器上都有一个这样结尾的配置文件,所以我需要在行的开头添加#

"C:\Documents and Settings\All Users\Application Data\McAfee\DesktopProtection\UpdateLog.txt" 8h 警告 * 0800 1800

"C:\EURNTCC\mcafee\sucessfull-update.log.txt" 8 小时警告 * 0800 1800

我做了一个这样的小脚本

$file="\server\C$\osit\etc\act_mon.cfg"

$text1='"C:\DOCUMENTS AND SETTINGS\ALL USERS\APPLICATION DATA\MCAFEE\DESKTOPPROTECTION\UPDATELOG.TXT"'

$text2='"C:\EURNTCC\MCAFEE\SUCESSFULL-UPDATE.LOG.TXT"'

 (gc $file) -replace $text2 ,("#" + $text1) |Set-Content $file
 (gc $file) -replace $text2 ,("#" + $text2) |Set-Content $file

我有这个错误 任何帮助理解这个错误,我有 650 个服务器要更新

正则表达式模式“C:\EURNTCC\MCAFEE\SUCESSFULL-UPDATE.LOG.TXT”无效。 在 line:1 char:1

-replace 使用正则表达式。您希望它搜索的字符串包含在正则表达式中具有特殊含义的字符,需要以反斜杠作为前缀。 (最明显的是点和反斜杠)

您不必手动执行此操作,但可以使用 [regex] 类型加速器中的静态方法 Escape()

$text1 = '"C:\DOCUMENTS AND SETTINGS\ALL USERS\APPLICATION DATA\MCAFEE\DESKTOPPROTECTION\UPDATELOG.TXT"'
$text2 = '"C:\EURNTCC\MCAFEE\SUCESSFULL-UPDATE.LOG.TXT"'

$search1 = [regex]::Escape($text1)
$search2 = [regex]::Escape($text2)

此外,您可以链接 replace 这样您就不必两次获取内容:

(Get-Content $file) -replace $search1 ,("#" + $text1) -replace $search2 ,("#" + $text2) | Set-Content $file