我的批处理文件中有此脚本-
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评论),但这完全取决于您所使用的内容。