IF语句导致SET PATH失败

时间:2015-06-09 19:28:03

标签: batch-file

我在Windows 7上编写一个简单的批处理脚本来添加一些环境文件路径。麻烦的是,由于现有路径中的空格,我的set path命令失败了:

SET PATH=C:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;%Path%

这失败了' \无法找到Microsoft'在现有的%path%变量中,我认为这是指: -

c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\

有一个简单的解决方案吗?

更新: 事实证明问题在于周围的IF语句。这个脚本会抛出上面提到的错误消息:

IF "TEST" == "TEST" (
  ECHO Using TEST settings on %COMPUTERNAME%
  SET PATH="C:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;%Path%"
  SET GDRIVE= (removed path)
) 

但如果删除IF语句,它可以正常工作:

ECHO Using TEST settings on %COMPUTERNAME%
SET PATH="C:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;%Path%"
SET GDRIVE= (removed path)

有谁知道为什么IF语句导致SET PATH失败?

2 个答案:

答案 0 :(得分:4)

要直接回答您的问题,在设置变量时避免评估括号和其他特殊字符的语法是set "var=value"。但是set在这里使用是错误的命令。你应该做的是

setlocal enabledelayedexpansion
path C:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;!PATH!

延迟扩展会阻止PATH变量的内容过早评估。有关path /?命令的详细信息,请从cmd控制台中键入path

如果您希望路径添加是持久的,请参阅this answer中示例脚本中的:append_path函数。

答案 1 :(得分:0)

使用GOTO命令将使PATH分配移至IF语句之外。这样可以消除由于在现有PATH变量中加上正确的括号而引起的问题。

IF NOT "TEST" == "TEST" (
    GOTO skiplabel
)

ECHO Using TEST settings on %COMPUTERNAME%
SET PATH="C:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;%Path%"
SET GDRIVE= (removed path)

:skiplabel
ECHO Do other stuff as desired