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