2012-09-19 37 views
1
$FilePath = 'Z:\next\ResourcesConfiguration.config' 
$oldString = 'Z:\next\Core\Resources\' 
$NewString = 'G:\PublishDir\next\Core\Resources\' 

任何想法如何替換具有以下內容的字符串:登錄它。我想更改配置文件中的路徑。簡單的代碼不適用於此。嘗試以下傳遞字符串包含:在PowerShell腳本中的替換變量

(Get-Content $original_file) | Foreach-Object { 
$_ -replace $oldString, $NewString 
} | Set-Content $destination_file 
+0

請爲輸入字符串提供所需的輸出。 – vonPryz

回答

5

Replace運算符采用正則表達式模式,'\'在正則表達式中有特殊含義,它是轉義字符。你需要在每個反斜槓加倍,或更好,使用遁法:

$_ -replace [regex]::escape($oldString), $NewString 

Alterntively,您可以使用方法與string.replace這需要一個字符串,並不需要特殊護理:

$_.Replace($oldString,$NewString) 
+0

非常感謝你。你救了我的一天。 – sam

0

試試這個,

$oldString = [REGEX]::ESCAPE('Z:\next\Core\Resources\') 

你需要逃出來搜索模式。

0

這工作:

$Source = 'Z:\Next\ResourceConfiguration.config' 
$Dest = 'G:\PublishDir\next\ResourceConfiguration.config' 
$RegEx = "Z:\\next\\Core\\Resources" 
$Replace = 'G:\PublishDir\next\Core\Resources' 

(Get-Content $FilePath) | Foreach-Object { $_ -replace $RegEx,$Replace } | Set-Content $Dest 

你嘗試不工作是-replace預計它的第一個參數是一個正則表達式的原因。簡而言之,您需要通過添加額外的退格鍵(\\)來避免目錄路徑中的反斜槓。它期望第二個參數是一個字符串,所以不需要做任何改變。

+0

使用'[regex] :: escape'的答案當然更簡潔,更容易管理。 –

相關問題