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

Powershell-更新多个批处理文件中的文件路径,powershell,replace,filepath,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 "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

我错过了什么?谢谢大家!

反斜杠和句点在正则表达式中有特殊的含义。在您的情况下,您希望与实际的反斜杠和句点匹配,因此必须使用反斜杠来转义它们

因此,您的替换线应如下所示:

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

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

请删除批处理文件标记。谢谢!我知道这是一个正则表达式。这完全有道理!