2011-01-11 92 views
31

在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中正确转义的语法,我不需要问这个问题。

+0

也许有用:http://geekswithblogs.net/Lance/archive/2009/12/29/program-files-environment-variable-in-powershell.aspx – Kiquenet 2013-04-03 10:36:38

回答

50

简单。更换第6行以删除括号内的空格:

$d = "${Env:ProgramFiles(x86)}"  # LINE 6 (NO spaces inside brackets) 

您只需将包含()的变量换成{}即可。括号内没有空格。

+1

谢谢@ravikanth!我以“$ {Env:ProgramFiles(x86)}”失败,请注意它包含空格。我应该认识到,这不同于“$ {Env:ProgramFiles(x86)}”,不包含空格。为了清晰起见,我在回答中添加了一些附加文字。 – jwfearn 2011-01-11 02:30:39

相关问题