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语句的第一部分(逗号之前)转义这些类型的字符,因为这是正则表达式。替换语句的第二部分(逗号后)是要替换的文本,不必转义这些字符。请删除批处理文件标记。谢谢!我知道这是一个正则表达式。这完全有道理!