我希望设置一个变量,比如JAVA_HOME,动态地假设另一个变量JAVA_HOME_x64的值,以便每当JAVA_HOME_x64更改并创建新的终端会话时,JAVA_HOME都会被分配为JAVA_HOME_x64的值。在powershell中,我执行以下操作...
当我打开一个新的命令提示符并输入set(或echo %JAVA_HOME%)时,它显示JAVA_HOME的值为%JAVA_HOME_x64%,而不是c:\myjava。
然而,如果我进入UI(如下所示)并手动编辑(删除和重新创建)JAVA_HOME并将其值重置为%JAVA_HOME_x64%,然后启动一个新的命令提示符/终端会话,它现在显示JAVA_HOME的值为c:\myjava。为什么?有什么想法吗?如何通过PowerShell命令实现与UI中相同的行为。
经过一些调查,我意识到,通过上述PowerShell命令行创建的注册表键(位于Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)对于所说的变量来说是REG_SZ类型,而通过UI创建的那个是REG_EXPAND_SZ类型。这可能是线索。
[System.Environment]::SetEnvironmentVariable('JAVA_HOME', '%JAVA_HOME_x64%', 'Machine');
[System.Environment]::SetEnvironmentVariable('JAVA_HOME_x64', 'c:\myjava', 'Machine');
[System.Environment]::GetEnvironmentVariable('JAVA_HOME', 'Machine') ==> returns %JAVA_HOME_x64%
当我打开一个新的命令提示符并输入set(或echo %JAVA_HOME%)时,它显示JAVA_HOME的值为%JAVA_HOME_x64%,而不是c:\myjava。
然而,如果我进入UI(如下所示)并手动编辑(删除和重新创建)JAVA_HOME并将其值重置为%JAVA_HOME_x64%,然后启动一个新的命令提示符/终端会话,它现在显示JAVA_HOME的值为c:\myjava。为什么?有什么想法吗?如何通过PowerShell命令实现与UI中相同的行为。
![Set enviroment variable manually via UI](https://istack.dev59.com/3YgzQ.webp)
JAVA_HOME
没有设置为c:\myjava
。另外,你所说的“任何新的”命令是指哪些命令?请更新问题并分享更多信息。 - alexzelaya