1
$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
4

3 回答 3

5

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

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

或者,您可以使用 string.replace 方法,它需要一个字符串并且不需要特别注意:

$_.Replace($oldString,$NewString)
于 2012-09-19T10:44:36.743 回答
0

尝试这个,

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

您需要转义要搜索的模式。

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

于 2012-09-19T10:52:08.943 回答