脚本更改JAVA_HOME环境变量不起作用
我最近遇到了以下问题:我有一个脚本更改JAVA_HOME环境变量不起作用,java,windows,batch-file,environment-variables,adoptopenjdk,Java,Windows,Batch File,Environment Variables,Adoptopenjdk,我最近遇到了以下问题:我有一个.jar文件,它还没有移植到比Java8更高的Java版本中,但更喜欢使用Java13。我的环境是Windows,因此我从逻辑上尝试编写一个脚本来自动更改Path变量: set JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot set Path=%JAVA_HOME%\bin;%Path% echo Java 8 is set to path 我手动将我的JAVA\u HOME环境变量设置
.jar
文件,它还没有移植到比Java8更高的Java版本中,但更喜欢使用Java13。我的环境是Windows,因此我从逻辑上尝试编写一个脚本来自动更改Path变量:
set JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot
set Path=%JAVA_HOME%\bin;%Path%
echo Java 8 is set to path
我手动将我的JAVA\u HOME
环境变量设置为C:\Program Files\AdoptOpenJDK\jdk-13.0.2.8-hotspot
,并在路径中添加了%JAVA\u HOME%\bin
。然后,我将Path添加到文件夹中,在该文件夹中,我存储了将Path变量更改为所需版本的脚本,并为java8和java13编写了批处理文件。如果JAVA\u HOME
运行良好,我在cmd中进行了测试:
echo %JAVA_HOME%
C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot
的确如此。此外,我还可以成功地调用我的脚本(我的批处理文件名为switch\u to_java8
:
C:\WINDOWS\system32>switch_to_java8
C:\WINDOWS\system32>set JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot
C:\WINDOWS\system32>set Path=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot\bin;C:\Program Files (x86)\Python38-32\Scripts\;C:\Program Files (x86)\Python38-32\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\Microsoft VS Code\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\Common Files\Autodesk Shared\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\AdoptOpenJDK\jdk-13.0.2.8-hotspot\bin;C:\Program Files\AdoptOpenJDK\scripts;C:\Users\minef\AppData\Local\Microsoft\WindowsApps
C:\WINDOWS\system32>echo Java 8 is set to path
Java 8 is set to path
似乎它毕竟没有修改
JAVA\u HOME
,我也不太明白为什么。原因是什么,如何解决?我在每个步骤中都使用了提升的访问权限。另外,是否可以编写一个批处理文件来调用C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot\bin\JAVA.exe直接调用?如果可以,如何我能做吗?我不太明白问题出在哪里,您已经将JAVA\u HOME设置为C:\Program Files\AdoptionOpenJDK\jdk-8.0.242.08-hotspot,它就这样做了。我遗漏了什么吗
对于您的另一个问题,要运行C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot\java.exe,只需调用%java\u HOME%\java.exe
即可set
命令只影响当前shell。但是java不使用java\u HOME变量,只使用PATH变量。@user207421是的,很明显java使用了PATH变量。我正在尝试为此,使用%JAVA\u HOME%\bin
作为路径变量,并将JAVA\u HOME变量修改为给定的JDK文件夹,因此,如果我想使用JDK 13,脚本会将我的JAVA\u HOME更改为JDK 13的文件夹,从而使路径变量成为新更改的JAVA\u HOME的bin文件夹。但是,正如您所看到的,如果仔细观察路径变量本身没有更改为%JAVA\u HOME%\bin
。您的问题不清楚,如果您想更好地向我们解释您想要什么,它将有助于我们帮助您。我的最佳猜测是,您想从现有的%PATH%
值中删除C:\Program Files\AdoptionOpenJDK\jdk-13.0.2.8-hotspot\bin
,而不是ad在扩展值%JAVA\u HOME%\bin
中,您希望将其添加到未扩展的形式中。其想法是,%JAVA\u HOME%
的简单更改将始终反映在%PATH%
中,而无需更新这两个变量。我的分析正确吗?Compo,是的,您的分析非常正确。如果这是一个错误,我很抱歉格式错误的问题。不,我清楚地指出,它没有变为那样,它可以在运行脚本时看到,并且列出了路径变量。关于我的另一个问题,你认为如果我使用相对路径而不是编写%JAVA_HOME%
?@BalázsBörcsök,那么你的问题写得不正确还是有错误e附加了错误的代码,您正在脚本中调用SET JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot
,因此即使您事先手动设置,它也会在脚本中更改它。%JAVA_HOME%
已经是一个相对路径,因此我看不出使用不同相对路径的原因。无论哪种方式,您都可以如果您确实想要,请使用%%~d
。