Powershell - 更新多个批处理文件中的文件路径

时间:2016-08-06 14:40:17

标签: powershell replace filepath

我找到了以下代码片段和一个关闭字符串值,这非常有效

$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

我错过了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

反斜杠和句点在正则表达式中具有特殊含义。在你的情况下,你想匹配一个实际的反斜杠和句号,所以你必须用反斜杠来逃避它们。

所以你的替换行应该是这样的:

Foreach-Object { $_ -replace '\\Program Files\\App\\AppClient\\4\.0', '\Program Files (x86)\App\AppClient' } |

为了澄清,您只需要在replace语句的第一部分(逗号之前)中转义那些类型的字符,因为这是正则表达式。替换语句的第二部分(在逗号之后)是您要替换它的文本,并且您不必转义这些字符。