PowerShell:使用变量组合路径

这一定是显而易见的,但我不能让它发挥作用。 我正在尝试使用环境变量(
$env:programfiles(x86)
)构建一个应包含现有文件路径的变量。但是我一直在收到错误,我不明白为什么。 这工作正常(如果文件存在):
PS C:> $f = "C:Program Files (x86)" + 'sometextfile.txt'
PS C:> $f
C:Program Files (x86)sometextfile.txt
PS C:> gci $f
    Directory: C:Program Files (x86)
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        13/12/2010     14:03          0 sometextfile.txt
PS C:>
但是,这不是:
PS C:> "$env:programfiles(x86)"
C:Program Files(x86)
PS C:> $f = "$env:ProgramFiles(x86)" + 'sometextfile.txt'
PS C:> $f
C:Program Files(x86)sometextfile.txt
PS C:> gci $f
Get-ChildItem : Cannot find path 'C:Program Files(x86)sometextfile.txt' because it does not exist.
At line:1 char:4
+ gci <<<<  $f
    + CategoryInfo          : ObjectNotFound: (C:Program Files(x86)sometextfile.txt:String) [Get-ChildItem], ItemNot
   FoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
发生了什么,我该如何解决?     
已邀请:
这是发生了什么...... 在任何Windows PowerShell路径中,空字符或空格都需要用一组引号或括号括起来。由于PowerShell需要逃离真实路径中的空白空间,因此
C:Program Files (x86)
的PowerShell环境变量是
${env:ProgramFiles(x86)}
而不是
$env:ProgamFiles(x86)
。 如果您使用'$ {env:ProgramFiles(x86)}'显式环境变量,它可以完美地工作。 这不会起作用......
PS C:> cd "$env:programfiles(x86)"
Set-Location : Cannot find path 'C:Program Files(x86)' because it does not e
At line:1 char:3
+ cd <<<<  "$env:programfiles(x86)"
+ CategoryInfo          : ObjectNotFound: (C:(x86):String)
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.
或这个...
PS C:> $env:ProgramFiles(x86)
Unexpected token '(' in expression or statement.
At line:1 char:19
+ $env:ProgramFiles( <<<< x86)
+ CategoryInfo          : ParserError: ((:String) [], Parent
+ FullyQualifiedErrorId : UnexpectedToken
但这很有效......
PS C:> ${env:ProgramFiles(x86)}
C:Program Files (x86)
PS C:> $f = "${env:ProgramFiles(x86)}" + "sometextfile.txt"
PS C:> $f
C:Program Files (x86)sometextfile.txt
PS C:> gci $f
Directory: C:Program Files (x86)


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        12/13/2010   8:58 AM          0 sometextfile.txt
    
这很奇怪,看起来像一个bug。实际上它正在解析
$env:programfiles
变量并附加字符串的其余部分 - 在这种情况下恰好是(x86)。 这将工作:
$f =  ${env:ProgramFiles(x86)} + 'sometextfile.txt'
    

要回复问题请先登录注册