我在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失败?
答案 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