PowerShell 中带括号的环境变量名称,如 %ProgramFiles(x86)%?
Posted
技术标签:
【中文标题】PowerShell 中带括号的环境变量名称,如 %ProgramFiles(x86)%?【英文标题】:Environment variable names with parentheses, like %ProgramFiles(x86)%, in PowerShell? 【发布时间】:2011-06-06 21:48:57 【问题描述】:在 PowerShell 脚本中,如何获取名称中包含括号的环境变量的值?
为了使事情复杂化,一些变量的名称包含括号,而其他变量的名称相似但没有括号。例如(使用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 中正确转义的语法,我就不需要问这个问题了。
【问题讨论】:
也许有用:geekswithblogs.net/Lance/archive/2009/12/29/… 【参考方案1】:简单。更改第 6 行以删除括号内的空格:
$d = "$Env:ProgramFiles(x86)" # LINE 6 (NO spaces inside brackets)
您只需将包含 () 的变量用 包装起来。括号内没有空格。
【讨论】:
谢谢@ravikanth!我使用“$ Env:ProgramFiles(x86) ”失败了,请注意它包含空格。我应该意识到这与“$Env:ProgramFiles(x86)”不同,不包含空格。为了清楚起见,我在您的答案中添加了一些额外的文字。 我删除了与我的帖子中相同的多余行。希望你不要介意。 再次感谢@ravikanth。对于那些感兴趣的人,更多详情请访问:technet.microsoft.com/en-us/library/dd347604.aspx。请参阅标题为包含特殊字符的变量名称的部分。甚至还有一个使用 $Env:ProgramFiles(x86) 的示例。以上是关于PowerShell 中带括号的环境变量名称,如 %ProgramFiles(x86)%?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过环境变量设置名称中带有下划线的 Spring Boot 属性?
如何通过环境变量设置名称中带有下划线的 Spring Boot 属性?