7
$100 = "$env:APPDATA/somthing"
$iamhere = "C:/example"
$100 = $100 -replace "`$env:APPDATA\somthing", "$iamhere" 

尽管我收到此错误,但我想$100替换$iamhere为它的内容(以文本形式)。

Regular expression pattern is not valid: $env:APPDATA\somthing.
At line:1 char:1
$100 = $100 -replace "`$env:APPDATA\somthing", "$iamhere"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   + CategoryInfo          : InvalidOperation: ($env:APPDATA\somthing:String) [], RuntimeException
   + FullyQualifiedErrorId : InvalidRegularExpression

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

4

2 回答 2

16

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

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

因此,只需像这样更新您的示例:

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

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

于 2013-09-25T00:56:11.877 回答
6

你可以*.replace改用

$100 = "$env:APPDATA/somthing"

$iamhere = "C:/example"

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

它不会使用正则表达式

于 2020-02-06T13:21:20.917 回答