我有一个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
变量的整个值应该在引号中。
答案 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机器上。