传递包含的字符串:在powershell脚本中签署-Replace Variable

时间:2012-09-19 10:35:10

标签: string powershell replace literals

$FilePath = 'Z:\next\ResourcesConfiguration.config'
$oldString = 'Z:\next\Core\Resources\'
$NewString = 'G:\PublishDir\next\Core\Resources\'

任何想法如何替换具有以下内容的字符串:登录。我想更改配置文件中的路径。简单的代码不适用于此。试过以下

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

3 个答案:

答案 0 :(得分:5)

Replace运算符采用正则表达式模式,'\'在正则表达式中具有特殊含义,它是转义字符。你需要加倍每个反斜杠,或者更好,使用转义方法:

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

另外,你可以使用string.replace方法,它接受一个字符串,不需要特别小心:

$_.Replace($oldString,$NewString)

答案 1 :(得分:0)

试试这个,

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

您需要转义模式才能搜索。

答案 2 :(得分: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期望它的第一个参数是正则表达式。简而言之,您需要转义目录路径中的反斜杠,这是通过添加额外的退格(\\)来完成的。它期望第二个参数是一个字符串,因此不需要在那里进行任何更改。