【问题标题】:Environmental variable with parentheses results in "unexpected token" error带括号的环境变量导致“意外令牌”错误
【发布时间】:2014-06-29 23:34:33
【问题描述】:

我有一个 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"

我收到了这个错误:

表达式或语句中出现意外的标记 '('。

那么我如何引用包含括号的环境变量呢?

【问题讨论】:

    标签: powershell powershell-2.0


    【解决方案1】:

    在这种情况下,您不需要子表达式 $()

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

    输出:

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

    如果您仍想使用子表达式,您可以指定一个包含 PowerShell 语法字符的变量名,如下所示:

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

    【讨论】:

    • 实际上,Keith,您必须在这种情况下使用子表达式:${env:ProgramFiles(x86)} 的值是C:\Program Files (x86)——注意左括号前的空格!您的第一个代码片段不是访问${env:ProgramFiles(x86)},而是访问${env:ProgramFiles}+"(x86)",它不包括那个非常重要的空间。 :-)
    • 是的,没有注意到缺少的空间。当 PowerShell 看到第一个括号时,它会停止“读取”变量名。这就是{} 的用途。更新了答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多