【问题标题】:Passing string included : signs to -Replace Variable in powershell script传递字符串包括:符号到 -Replace 脚本中的变量
【发布时间】:2012-09-11 15:50:42
【问题描述】:
$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

【问题讨论】:

  • 请为输入字符串提供所需的输出。

标签: string powershell replace literals


【解决方案1】:

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

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

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

$_.Replace($oldString,$NewString)

【讨论】:

  • 非常感谢......你拯救了我的一天。
【解决方案2】:

试试这个,

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

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

【讨论】:

    【解决方案3】:

    这行得通:

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

    【讨论】:

    • 使用[regex]::escape 的答案当然会更简洁,以后也更容易管理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2018-11-28
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多