在PowerShell脚本中,如何获取其名称包含括号的环境变量的值?PowerShell中带有括号的环境变量名称,如%ProgramFiles(x86)%?
更复杂的是,一些变量的名称包含括号而另一些则没有括号相似的名称。例如(使用cmd.exe
):
C:\>set | find "ProgramFiles"
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
我们看到%ProgramFiles%
是不一样的%ProgramFiles(x86)%
。
我的PowerShell代码未能以一种不可思议的方式,因为它忽略了环境变量名的括号之后的部分。由于这恰好匹配的不同我没有失败的名义,但现有的环境变量,我只是得到了错误的变量的权值。
下面是PowerShell脚本语言测试功能来说明我的问题:
function Do-Test
{
$ok = "C:\Program Files (x86)" # note space between 's' and '('
$bad = "$Env:ProgramFiles" + "(x86)" # uses %ProgramFiles%
$d = "${ Env:ProgramFiles(x86) }" # fail (2), LINE 6
# $d = "$Env:ProgramFiles(x86)" # fail (1)
if ($d -eq $ok) {
Write-Output "Pass"
} elseif ($d -eq $bad) {
Write-Output "Fail: (1) %ProgramFiles% used instead of %ProgramFiles(x86)%"
} else {
Write-Output "Fail: (2) some other reason"
}
}
而这里的输出:
PS> Do-Test
Fail: (2) some other reason
有一个简单的变化,我可以做6行以上获得%ProgramFiles(x86)%的正确值?
注:在这篇文章的文字我使用批处理文件语法环境变量作为方便的速记。例如,%SOME_VARIABLE%表示“名称为SOME_VARIABLE的环境变量的值”。如果我知道PowerShell中正确转义的语法,我不需要问这个问题。
也许有用:http://geekswithblogs.net/Lance/archive/2009/12/29/program-files-environment-variable-in-powershell.aspx – Kiquenet 2013-04-03 10:36:38