我正在用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"
希望获得帮助! 问候
答案 0 :(得分:0)
仅使用正则表达式即可进行快速且非常脏的替换:
(Get-Content -Path $path) -replace '(?m)%(.*?)%', '$$$1'
如果您的目标是在某个时候由PowerShell或bash解释,则建议使用变量定界符:
'$${$1}'