%JAVA_HOME%在Windows路径中如何工作?

%JAVA_HOME%在Windows路径中如何工作?,java,windows,path,environment-variables,puppet,Java,Windows,Path,Environment Variables,Puppet,我正在使用Puppet自动安装java。执行此操作时,我们首先将JAVA\u HOME环境设置为要安装的JAVA的任何版本。然后,我们将它预先发送到Windows路径。这样,如果正在使用任何其他版本的java,它将不会使用它,而是使用java\u HOME中的任何内容。我遇到的问题是,当我运行dir%JAVA\u HOME%I返回时 “系统找不到指定的路径” 然而,当我echo%JAVA\u HOME%时,它为我提供了到JDK的正确路径 我应该期望dir%JAVA\u HOME%向我显示目录内容

我正在使用Puppet自动安装java。执行此操作时,我们首先将
JAVA\u HOME环境
设置为要安装的JAVA的任何版本。然后,我们将它预先发送到Windows
路径
。这样,如果正在使用任何其他版本的java,它将不会使用它,而是使用
java\u HOME
中的任何内容。我遇到的问题是,当我运行
dir%JAVA\u HOME%
I返回时

“系统找不到指定的路径”

然而,当我
echo%JAVA\u HOME%
时,它为我提供了到JDK的正确路径

我应该期望
dir%JAVA\u HOME%
向我显示目录内容吗?若否,原因为何?我们还有另一个程序,它使用完全相同的Puppet方法,当执行
dir M2_HOME
(maven)时,它将正确地打印出目录内容


Java-version
仍然有效

您需要从Java home中删除bin并添加%Java\u home%/bin

奇怪的解析。我们最初的做法确实有效。然而,
JAVA\u HOME
不能是
C:\Program Files\xxxxxxx
它需要是
C:\PROGRA~1\xxxxxx
,它才能列出目录内容。

你需要从JAVA HOME中删除bin并添加%JAVA\u HOME%/bin不,它没有-你只需要按照Elliott的评论在它周围加上引号。我向你保证,这也不管用。它仅在使用
PROGRA~1
而不是
程序文件时起作用。Windows无法处理嵌入空间。当然,Windows可以处理嵌入空间。由于Windows路径通常有嵌入的空间,如果不是这样的话,早就有人注意到了!不过,为了确保这一点,我刚刚尝试了
dir”%ProgramFiles%”
,效果非常好。不管你有什么问题,都不是。也许您在
%JAVA\u HOME%
的开头或结尾有一个零散的空间?或者您正在一个不寻常的环境中运行
dir
命令,例如,通过Puppet或第三方shell?