2016-06-21 119 views
1

嘗試過各種組合,但我無法替換下面的文字 - 我一直在收到錯誤。我有一種感覺,它不喜歡「\」甚至是我已經添加的「$」,但看不出什麼是錯的 - 任何幫助將不勝感激。我想要做的就是將一些文字替換爲其他文字。替換文字失敗

PS C:\> $f = "C:\LocalGAR\WIN\Comp\register\x86_v1.0" 

PS C:\> $f -replace ('C:\LocalGAR','\\comp.gci.tk.com\files$') 
The regular expression pattern C:\LocalGAR is not valid. 
At line:1 char:1 
+ $f -replace ('C:\LocalGAR','\\comp.gci.tk.com\files$') 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (C:\LocalGAR:String) [], RuntimeException 
    + FullyQualifiedErrorId : InvalidRegularExpression 

回答

2

完全不同的你要逃避斜線在你的搜索模式

手動逃脫

$f -replace ('C:\\LocalGAR','\\comp.gci.tk.com\files$') 

或更安全的自動轉義字符串

$f -replace ([Regex]::Escape('C:\LocalGAR'),'\\comp.gci.tk.com\files$') 

RET甕

\\comp.gci.tk.com\files$\WIN\Comp\register\x86_v1.0 
+0

輝煌 - 作品魅力。感謝那.. – lara400

2

你有沒有打過電話「替代」作爲一個方法,像這樣:

$f.replace('C:\LocalGAR','\\comp.gci.tk.com\files$') 

這在您行則不會爲我拋出一個錯誤。 編輯(從馬蒂亞斯R.傑森): 是的,它也很好地注意"-replace"".replace"

+0

只是要清楚 - '.Replace()'和'-replace'是*不是相同 –

+0

謝謝你 - 我更喜歡這種方式。 – lara400

1

Powershell的-replace操作者使用模式匹配正則表達式,以及它們使用反斜槓\來識別正則表達式組 - 例如\s是「任何空格字符(空格,製表符)」。

它試圖匹配\Lregular expression command,並且找不到它,並且拋出錯誤。

-replace的替換文本是一個普通的字符串,而不是正則表達式,所以$沒有問題。

(這兩個選項中,通過其他的答案給出,是使用$string.replace()方法,其確實文字串替換,或逃避在正則表達式中的特殊字符所以它們不是命令 - 無論是通過用手或用[regex]::escape()) 。

+0

感謝您的信息 - 非常有用的知道。 – lara400