在ForEach-Object循环中编辑文本文件内容

时间:2018-09-17 21:49:43

标签: powershell loops scripting

刷新目录后,我正在尝试从PowerHhell编辑文本文件。

尝试从目标位置Get-Contentdbconnecthost,而源Set-Content是我们要搜索的目标位置。 然后,我们要替换为目标信息和.ps1。这些变量将从另一个function ReplaceDBhost { Get-Content ("$TargetLocation\Data\config.txt") | Foreach-Object { $_ -replace ('^dbconnecthost=' + '$SourceDBConnectHost'), ('dbconnecthost=' + '$TargetDBConnectHost' ) } | Set-Content ("$TargetLocation\Data\config.txt") } 文件中提取。

以下是我要使用的内容。

char **a

问题是,运行此程序时我没有任何更改。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

使用单引号时,这称为字符串 literal ,并且不支持变量扩展。要解决此问题,您需要使用双引号(如果变量是字符串,并且要附加+,则根本不能使用双引号):

(Get-Content -Path "$TargetLocation\Data\config.txt") |
    ForEach-Object {
        $_ -replace "^dbconnecthost=$SourceDBConnectHost", "dbconnecthost=$TargetDBConnectHost"
    } |
    Set-Content -Path "$TargetLocation\Data\config.txt"

尽管可以使用环视功能来改善您的正则表达式:

"(?<=^dbconnecthost=)$SourceDBConnectHost", $TargetDBConnectHost

缩短:

$path = @{Path = "$TargetLocation\Data\config.txt"}
$pattern = "(?<=^dbconnecthost=)$SourceDBConnectHost"
(Get-Content @path) -replace $pattern, $TargetDBConnectHost | Set-Content @path