2013-09-24 79 views
3

$ 100 = 「$ ENV:APPDATA /財產以後」正則表達式無效時

$ iamhere = 「C:/例如」

$ 100 = $ 100 -replace「`$ ENV:APPDATA \財產以後」,‘$ iamhere’

我想iamhere $其內容(文本形式)所取代,雖然我得到這個錯誤$ 100

正則表達式模式無效:$ env:APPDATA \ somthing。

在行:1個字符:1

$ 100 = $ 100 -replace 「`$ ENV:APPDATA \財產以後」, 「$ iamhere」 ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • CategoryInfo:InvalidOperation: ($ ENV:APPDATA \財產以後:字符串)[],的RuntimeException
  • FullyQualifiedErrorId:InvalidRegularExpression

我想這是因爲我想更換一些文字與目錄,但我想$ iamhere 感謝的變量中的文本,CollinScripter

+1

根據你的要求,爲什麼不只是設置$ 100到$ iamhere例如'$ 100 = $ iamhere'?另外你爲什麼要在'-replace'運算符的第一個參數中轉義'$'?你不想通過變量'$ env:APPDATA \ something'的*內容*來匹配嗎? –

回答

6

-replace運營商將解析您提供的常規輸入字符串表達。 \字符是正則表達式中的一個特殊字符,所以如果您希望從字面上理解它,則需要在其前面添加一個\以避免它。幸運的是.NET提供了一個方便的功能,這樣做,對你:

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

所以只要更新您的例子是這樣的:

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

請注意,您不需要引號iamhere $(但由於這是一個字符串,它沒有區別)。

+0

這不能正常工作。我輸入'[Regex] :: Escape('$ env:APPDATA \ somthing')'(單引號轉義PowerShell來讀取內容)這出現了'\ $ env:APPDATA \\東西'而不是'$ env:APPDATA \\ something'任何幫助解決@zdan?謝謝,CollinScripter – Collinscripter

+0

@Collinscripter你得到的輸出是正確的。 $也是正則表達式中的一個特殊字符,必須轉義以替換它。如果你的原始字符串真的是'$ env:APPDATA \ somthing',那麼這就是你需要的。 – zdan