Windows批处理:“如果存在”-路径存在,但它说不-为什么?

Ramgorur

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

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也不执行。

ixe013

陈浩然曾经说过

批处理语言不是设计好的;它进化了。

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

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

@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评论),但这完全取决于您所使用的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么路径//存在?

来自分类Dev

从批处理脚本行'如果存在[文件](...

来自分类Dev

批处理 - 如果(文件)存在命令?

来自分类Dev

为什么存在FloatAsIfIntegral?

来自分类Dev

为什么-0存在?

来自分类Dev

为什么CAShapeLayer存在?

来自分类Dev

为什么存在FloatAsIfIntegral?

来自分类Dev

Windows批处理文件,如果其他条件则检查任务是否存在

来自分类Dev

为什么vscode说资产不存在?扑

来自分类Dev

SQLite为什么说instr不存在?

来自分类Dev

批处理文件中的“如果不存在”命令

来自分类Dev

更新批处理文档(如果存在),否则插入MongoDB

来自分类Dev

批处理文件中的“如果不存在”命令

来自分类Dev

如果Windows批处理脚本只能执行,为什么bash脚本需要执行位?

来自分类Dev

为什么处理器检查说“与长模式兼容”,但VMplayer说“不兼容”?

来自分类Dev

为什么Void类存在?

来自分类Dev

为什么system()仍然存在?

来自分类Dev

为什么string :: begin存在?

来自分类Dev

为什么花哨的指针存在?

来自分类Dev

为什么堆内存存在?

来自分类Dev

为什么存在硬链接?

来自分类Dev

为什么Void类存在?

来自分类Dev

为什么存在多态关系?

来自分类Dev

Windows批处理文件:查找目录(如果不存在),创建,然后将文件移至该目录

来自分类Dev

Windows批处理文件:查找目录(如果不存在),创建,然后将文件移至该目录

来自分类Dev

为什么在输出路径中不存在dll

来自分类Dev

为什么 MATLAB 警告我不存在的路径?

来自分类Dev

Apache为什么说DocumentRoot即使不存在也不存在?

来自分类Dev

如果Android中存在游标,为什么需要模型类?

Related 相关文章

热门标签

归档