我的批处理文件中有此脚本-

if not exist "%JAVA_HOME%" (
    echo JAVA_HOME '%JAVA_HOME%' path doesn't exist) --- (1)
else (
    echo Setting JAVA property to '%JAVA_HOME%\bin\java' --- (2)
        set "JAVA=%JAVA_HOME%\bin\java")
%JAVA_HOME%设置为C:\Program Files (x86)\Java\jdk1.7.0_45。这个位置在我的机器上,但是上面的代码执行第(1)行,为什么?

跟进:

这让我发疯了,我现在有了这个脚本-
if "x%JAVA_HOME%" == "x" (
  set  JAVA=java
  echo JAVA_HOME is not set. Unexpected results may occur.
  echo Set JAVA_HOME to the directory of your local JDK to avoid this message.
) else (
  if not exist "%JAVA_HOME%" (
    echo Here ----------------------------------> note this line !!
    echo JAVA_HOME '%JAVA_HOME%' path doesn't exist
    goto END
  ) else (
    echo Setting JAVA property to '%JAVA_HOME%\bin\java'
    set "JAVA=%JAVA_HOME%\bin\java"
  )
)
:END

正确设置了%JAVA_HOME%(它是C:\Program Files (x86)\Java\jdk1.7.0_45)。但是当我运行时,我得到了这个错误-
prompt> test.bat
prompt> \Java\jdk1.7.0_45' was unexpected at this time
prompt>      echo JAVA_HOME 'C:\Program Files (x86)\Java\jdk1.7.0_45' path does not exist

到底是怎么回事?另请注意,echo Here行也未执行。

最佳答案

Raymond Chen once said:



这使它充满了怪癖。其中之一是它对括号很挑剔。

以下代码可在我的机器上运行:

@echo off

if not exist "%JAVA_HOME%" (
    echo JAVA_HOME '%JAVA_HOME%' path doesn't exist
) else (
    echo Setting JAVA property to '%JAVA_HOME%\bin\java'
    set JAVA=%JAVA_HOME%\bin\java
)

我单独使用) else ((一行上的单个括号),并从echo语句中删除了括号。

您可能还需要检查双引号。像您一样,将引号内的变量名放入Puttint将从值中删除引号。这是一个例子:
C:\>set "test=foo bar"

C:\>echo %test%
foo bar

C:\>echo "%test%"
"foo bar"

如果需要在变量值中加上引号,则将它们放在右侧,如下所示:
C:\>set test="foo bar"

C:\>echo %test%
"foo bar"

从头开始,改用前者会给您带来更大的灵活性(请参阅@foxidrive评论),但这完全取决于您所使用的内容。

10-07 21:39