代码之家  ›  专栏  ›  技术社区  ›  EMP

如何在windows批处理文件中设置另一个带有空格的变量值的路径

  •  5
  • EMP  · 技术社区  · 14 年前

    我有一个windows批处理脚本的问题,我正在打击我的头(没有双关语的意图)。有问题的脚本如下所示:

    if defined _OLD_VIRTUAL_PATH (
        set PATH=%_OLD_VIRTUAL_PATH%
    )
    

    当我运行它时 _OLD_VIRTUAL_PATH 我得到的是:

    \Microsoft was unexpected at this time.
    

    _旧虚拟路径 是最初从 PATH 它包含空格-我敢肯定这就是问题所在。但解决办法是什么?如果我将它括在引号中,它将成功运行,但我不认为 路径 变量应该用引号括起来。

    2 回复  |  直到 9 年前
        1
  •  7
  •   Chris Schmich    9 年前

    这里的问题不是空格,而是右括号。您可能正在运行一个64位系统,其中32位应用程序的程序文件目录是 Program Files (x86) . 在批处理文件中带圆括号的块中,右括号结束块,因此行的其余部分会导致语法错误。

    有两种方法可以解决这个问题:

    1)完成 set 引述的论点。这会导致闭合排列不被识别为块的结束:

    if defined _OLD_VIRTUAL_PATH (
        set "PATH=%_OLD_VIRTUAL_PATH%"
    )
    

    2)不要使用块:

    if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
    
        2
  •  0
  •   Michael Burr    14 年前

    我从来都不知道 defined 命令脚本中的操作直到现在…

    你的脚本对我来说似乎很好-哪一行确实产生了错误?

    您还可以尝试:

    if not "%_OLD_VIRTUAL_PATH%" == "" (
        set PATH=%_OLD_VIRTUAL_PATH%
    )
    

    相信我,如果你进入windows cmd脚本,希望它像bash中一样,你的头很快就会非常痛。如果CMD脚本不是一个绝对的要求,那么您可能需要研究使用其他脚本语言(powershell、python、perl-anything)。CMD脚本最大的优点(也许是唯一的优点)是它已经安装在每个Windows框中。