为什么提供以下Windows 7 .cmd命令脚本:
set SUN_JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_17
if 3==3 (
set JAVA_HOME=%SUN_JAVA_HOME%
)
echo ready
以下错误消息而不是打印“就绪”
\Java\jdk1.6.0_17 was unexpected at this time.
如果我删除了路径名中的“(x86)”,则错误消息会消失。
答案 0 :(得分:2)
在命令提示符下,输入以下命令
C:
CD\
dir /ogen /x
这将显示Program Files (x86)
使用该名称(可能“Progra~2”)
答案 1 :(得分:1)
问题是在if 3==3
部分之后的括号分组。
在解析set JAVA_HOME=%SUN_JAVA_HOME%
命令时,解释器会立即替换%SUN_JAVA_HOME%
变量,这会导致(386)
中右括号的早期匹配。
如果您启用delayed expansion并将%SUN_JAVA_HOME%
替换为!SUN_JAVA_HOME!
,则可以避免这种情况:
setlocal enabledelayedexpansion
set SUN_JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_17
if 3==3 (
set JAVA_HOME=!SUN_JAVA_HOME!
)
echo ready
答案 2 :(得分:1)
你必须用双引号括起set命令
替换
set SUN_JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_17
通过
set SUN_JAVA_HOME="C:\Program Files (x86)\Java\jdk1.6.0_17"
因为路径中有空格
答案 3 :(得分:0)
我written about this a while ago(现在稍微过时了)。
作为替代方案,如果您需要对命令进行分组,则使用子例程:
if 3==3 call :foo
...
goto :eof
:foo
...
goto :eof
答案 4 :(得分:0)
Previous answer没问题。我只想用简单的例子来澄清它。它是关于在x86和x64系统上检测32位应用程序的Program Files目录。 “(x86)”也有类似的问题。
IF DEFINED ProgramFiles(x86) (GOTO x64) ELSE (GOTO x86)
:x64
SET AppDir=%ProgramFiles(x86)%\SomeFolder
GOTO next
:x86
SET AppDir=%ProgramFiles%\SomeFolder
:next
ECHO %AppDir%