在powershell中替换时,正则表达式无效

时间:2013-09-24 22:18:46

标签: powershell powershell-v3.0

  

$ 100 =“$ env:APPDATA / somthing”

     

$ iamhere =“C:/ example”

     

$ 100 = $ 100 -replace“`$ env:APPDATA \ somthing”,“$ iamhere”

我希望100美元替换为其内容的$ iamhere(以文本形式),但我收到此错误。

  

正则表达式模式无效:$ env:APPDATA \ somthing。

     

在行:1字符:1

     

$ 100 = $ 100 -replace“`$ env:APPDATA \ somthing”,“$ iamhere”   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~

     
      
  • CategoryInfo:InvalidOperation:($ env:APPDATA \ somthing:String)[],RuntimeException
  •   
  • FullyQualifiedErrorId:InvalidRegularExpression
  •   

我认为这是因为我试图用目录替换一些文本,但我希望$ iamhere变量中的文本 谢谢,CollinScripter

2 个答案:

答案 0 :(得分:8)

-replace运算符将解析您提供的输入字符串作为正则表达式。 \字符是正则表达式中的特殊字符,因此如果您希望字面处理它,则需要通过在其前面添加\来转义它。幸运的是.NET为您提供了一个方便的功能:

# ~> [Regex]::Escape("$env:APPDATA/somthing")
C:\\Users\\username\\AppData\\Roaming/somthing

所以只需像这样更新你的例子:

$100 = $100 -replace [Regex]::Escape("$env:APPDATA/somthing"), $iamhere

请注意,您不需要$ iamhere周围的引号(但因为它是一个字符串,所以没有区别)。

答案 1 :(得分:4)

您可以改用*.replace

$100 = "$env:APPDATA/somthing"

$iamhere = "C:/example"

$100 = $100.replace("$env:APPDATA/somthing", "$iamhere")

那么它将不使用正则表达式