在powershell中替换包含$ {some string in variable}的文件中的字符串

时间:2017-07-25 11:29:19

标签: powershell

我有一个文本文件,其中包含${key}形式的哈希表的一些键。我需要解析文本文件并将${key}替换为它的值。以下是我正在使用的代码

    #$config is the hashtable
   $document = Get-Content sample.txt
    foreach ($conf in $config.Keys) {
        [string]$match = '${' + $conf + '}'
        $document = $document.Replace($match, $($config.$conf))
        }
    }

我已尝试过以下$match字符串

的替代方案

[string]$match = "`${" + $conf + "}"

[string]$match='${'
$match+=$conf
$match+='}'

我甚至尝试将字符串硬编码为$match='${BACKUP_FOLDER}',但在所有情况下它都没有做任何事情。我也试过-match看看是否匹配,但它总是返回false。 我已确认文本文件包含几种${key}格式的模式,如果我复制$match的输出并在文件中搜索,我可以找到模式。你能指出一下是什么错吗?我正在使用Powershell V5.0

示例输入

$config=@{"BACKUP_DIR"="_Backup";"STAGING_DIR"="_Staging"}

sample.txt的内容

Overwrites the contents of new installation with old installation 
    Always use / as path seperator-->
    <!-- <rename path="" newName=""/> -->
    <!-- 
    ${BACKUP_DIR}
    rename-> rename file/directory in new installation

输出:${BACKUP_DIR}应替换为_Backup

1 个答案:

答案 0 :(得分:1)

看起来哈希表中有几个拼写错误。以下是一个完整的解决方案,您可以将其保存为脚本并运行或复制到控制台。

$document = @'
Overwrites the contents of new installation with old installation 
    Always use / as path seperator-->
    <!-- <rename path="" newName=""/> -->
    <!-- 
    ${BACKUP_FOLDER}
    rename-> rename file/directory in new installation
'@

$config=@{"BACKUP_FOLDER"="_Backup";"STAGING_DIR"="_Staging"}

Write-Output "`n`nINPUT`n$document"

foreach ($conf in $config.Keys) {
        [string]$match = '${' + $conf + '}'
        $document = $document.Replace($match, $config.$conf)
}

Write-Output "`n`nOUTPUT`n$document"