Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
脚本更改JAVA_HOME环境变量不起作用_Java_Windows_Batch File_Environment Variables_Adoptopenjdk - Fatal编程技术网

脚本更改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