如何用Powershell中的单词替换两个字符之间的字符串中的单词?

时间:2019-04-05 11:23:25

标签: .net windows powershell replace

我正在用Powershell编写脚本,以将JSON文件的环境变量添加到另一个程序。我遇到的主要问题是我需要一个单词,该单词介于两个字符之间,例如:%hello%,我想用单词和其他字符替换它。 %Hello%必须是$ Hello。 这个词在路径字符串中,所以我不能只替换字符串。

我知道PowerShell中的“替换”功能或其他格式设置功能,但是我不知道如何将两个字符之间找到的单词替换为同一单词。

这是我的:config.json

{
  "DUMMY_INCLUDEPATH": "%DUMMY_HOME%\\src\\main\\include",
  "DUMMY_LIBRARYPATH": "%DUMMY_HOME%\\Test%Platform% 
}

这是我的powershell函数:

function SetEnvVars {
    [string] $pathToConfig = "$($PSScriptRoot)\config.json",
    [string] $pathToIntermediateEnvFile = "$($PSScriptRoot)\envvarsSet.properties"

    $json = Get-Content "$($pathToConfig)" | ConvertFrom-Json
    $sw = [System.IO.StreamWriter] "$($pathToIntermediateEnvFile)"
    $json.psobject.Properties | ForEach-Object {
        [bool] $bEnvVarWasSet = EnvironmentSetOrIgnore $_.Name $_.Value
        if ($true -eq $bEnvVarWasSet) {

            $sw.WriteLine("env."+$_.Name+" = `""+$_.Value+"`"")
        }
    }
    $sw.close()
    Set-Item env:ERRORLEVEL 0
    return 0
}

我在“ envvarsSet.properties”中获得的输出如下:

env.DUMMY_INCLUDEPATH = "%DUMMY_HOME%\src\main\include"
env.DUMMY_LIBRARYPATH = "%DUMMY_HOME%\Test%Platform%"

但是我需要的是:

env.DUMMY_INCLUDEPATH = "$DUMMY_HOME\src\main\include"
env.DUMMY_LIBRARYPATH = "$DUMMY_HOME\Test$Platform"

希望获得帮助! 问候

1 个答案:

答案 0 :(得分:0)

仅使用正则表达式即可进行快速且非常脏的替换:

(Get-Content -Path $path) -replace '(?m)%(.*?)%', '$$$1'

如果您的目标是在某个时候由PowerShell或bash解释,则建议使用变量定界符:

'$${$1}'