【问题标题】:Powershell - Update File Path in Multiple Batch FilesPowershell - 更新多个批处理文件中的文件路径
【发布时间】:2016-08-06 14:40:16
【问题描述】:

我找到了下面的 sn-p 代码和一次性字符串值,这很好用

$configFiles = Get-ChildItem . *.bat -rec
foreach ($file in $configFiles)
{
(Get-Content $file.PSPath) |
Foreach-Object { $_ -replace "prodapp", "devapp" } |
Set-Content $file.PSPath
}

但是当我继续尝试使用相同的代码来更新文件路径时,我得到一个正则表达式错误

$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

我错过了什么?谢谢!

【问题讨论】:

  • 请删除批处理文件标签。

标签: powershell replace filepath


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢!我知道这是一个正则表达式。这完全有道理!
猜你喜欢
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多