jwf*_*arn 35 powershell escaping environment-variables
在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)
Run Code Online (Sandbox Code Playgroud)
我们看到%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"
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
PS> Do-Test
Fail: (2) some other reason
Run Code Online (Sandbox Code Playgroud)
我可以对上面的第6行进行简单的更改,以获得%ProgramFiles(x86)%的正确值吗?
注意:在这篇文章的文本中,我使用环境变量的批处理文件语法作为方便的简写.例如,%SOME_VARIABLE%表示"名称为SOME_VARIABLE的环境变量的值".如果我在PowerShell中知道正确转义的语法,我就不需要问这个问题了.
rav*_*nth 54
简单.更改第6行以删除括号内的空格:
$d = "${Env:ProgramFiles(x86)}" # LINE 6 (NO spaces inside brackets)
Run Code Online (Sandbox Code Playgroud)
您只需将包含()的变量包装为{}.括号内没有空格.
归档时间: |
|
查看次数: |
29880 次 |
最近记录: |