2014-05-12 97 views
1

括号结果环境变量我有一个运行我的程序文件目录下的可执行文件的PowerShell的(2.0)脚本,我使用一个环境变量引用的路径:在“意外的标记”错误

Start-Process "$($env:ProgramFiles)\ProgramFolder\Executable.exe" 

这在我的x86机器上运行良好,但现在我试图在x64机器上运行它。由于可执行文件是32位的,它位于下方的“C:\ Program Files文件(x86)的”,因此,我已经调整了我的脚本如下,因为环境变量,我需要用的是ProgramFiles(x86)

Start-Process "$($env:ProgramFiles(x86))\ProgramFolder\Executable.exe" 

虽然我得到这个错误:?

意外令牌“(”在

那么,如何引用一个环境变量因为它包含括号表达式或语句

回答

3

你并不需要的子表达式$()在这种情况下:

"${env:ProgramFiles(x86)}\ProgramFolder\Executable.exe" 

输出:

C:\Program Files (x86)\ProgramFolder\Executable.exe 

如果你仍然想使用一个子表达式,你可以指定包含的PowerShell语法一个变量名像这样的字符:

"$(${env:ProgramFiles(x86)})\ProgramFolder\Executable.exe" 
+2

其实,基思,你_必须在这种情况下使用子表达式:'$ {env:ProgramFiles(x86)}'的值是'C:\ P rogram文件(x86)' - 注意左边的文件之前的空间!你的第一个代码片段不是访问'$ {env:ProgramFiles(x86)}',而是''{env:ProgramFiles} +“(x86)”',它不包含那个非常重要的空间。 :-) –

+0

是的,没有注意到失踪的空间。 PowerShell在看到第一个paren时停止“读取”变量名称。这就是'{}'的用途。更新了答案。谢谢。 –