如何在Windows批处理文件中将PATH设置为带空格的另一个变量值

时间:2010-05-05 07:30:15

标签: windows scripting batch-file path

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

if defined _OLD_VIRTUAL_PATH (
    set PATH=%_OLD_VIRTUAL_PATH%
)

当我运行它并设置_OLD_VIRTUAL_PATH时,我得到:

\Microsoft was unexpected at this time.

_OLD_VIRTUAL_PATH是一个最初从PATH设置的变量,它包含空格 - 我很确定这是问题所在。但是解决方案是什么?如果我将它括在引号中,它会成功运行,但我不认为PATH变量的整个值应该在引号中。

2 个答案:

答案 0 :(得分:7)

这里的问题不是空格,而是一个右括号。您可能正在运行64位系统,其中32位应用程序的Program Files目录为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%

答案 1 :(得分:0)

嗯 - 直到现在我才知道cmd脚本中的defined操作......

你的脚本似乎对我很好 - 哪一行正好产生错误?

您也可以尝试:

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

相信我,如果你正在进入Windows cmd脚本,希望它与你在bash中所拥有的一样,那么你的头脑很快就会很痛苦。如果cmd脚本不是绝对要求,您可能需要考虑使用其他一些脚本语言(PowerShell,Python,PERL - 任何东西)。 cmd脚本编写的最重要的事情(也许是唯一的事情)是它已经安装在每个Windows机器上。