我找到了以下代码片段和一个关闭字符串值,这非常有效
$configFiles = Get-ChildItem . *.bat -rec
foreach ($file in $configFiles)
{
(Get-Content $file.PSPath) |
Foreach-Object { $_ -replace "prodapp", "devapp" } |
Set-Content $file.PSPath
}
但是当我继续尝试使用相同的代码更新文件路径时,我收到了一个regEx错误
$configFiles = Get-ChildItem . *.bat -rec
foreach ($file in $configFiles)
{
(Get-Content $file.PSPath) |
Foreach-Object { $_ -replace '\Program Files\App\AppClient\4.0', '\Program Files (x86)\App\AppClient' } |
Set-Content $file.PSPath
}
错误是
+ CategoryInfo : InvalidOperation: (\Program Files\App\
AppClient\4.0:String) [], RuntimeException
+ FullyQualifiedErrorId : InvalidRegularExpression
我错过了什么?谢谢!
答案 0 :(得分:0)
反斜杠和句点在正则表达式中具有特殊含义。在你的情况下,你想匹配一个实际的反斜杠和句号,所以你必须用反斜杠来逃避它们。
所以你的替换行应该是这样的:
Foreach-Object { $_ -replace '\\Program Files\\App\\AppClient\\4\.0', '\Program Files (x86)\App\AppClient' } |
为了澄清,您只需要在replace语句的第一部分(逗号之前)中转义那些类型的字符,因为这是正则表达式。替换语句的第二部分(在逗号之后)是您要替换它的文本,并且您不必转义这些字符。