【发布时间】:2021-08-21 09:49:04
【问题描述】:
我想设置一个变量 JAVA_HOME 来动态假设另一个变量的值 JAVA_HOME_x64..这样每当 JAVA_HOME_x64 更改并创建新的终端会话时,JAVA_HOME 就会被分配 JAVA_HOME_x64 的值。
在 powershell 中,我执行以下操作...
[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 中相同的行为。
经过一番调查,我意识到,通过上述 powershell 命令行为所述变量创建的注册表项(在 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 中)是 REG_SZ 类型,而通过 UI 创建的那个是 REG_EXPAND_SZ。这也许是线索
【问题讨论】:
-
我尝试查看此stackoverflow.com/questions/50607618/…,但它仍然不适合我。
-
但是请注意,如果我使用“以管理员身份运行”打开命令提示符,它似乎工作正常。
-
我认为这个问题需要更正。
JAVA_HOME未在命令中设置为c:\myjava。另外,您的意思是“任何新的”命令是什么?请更新问题并分享更多信息。 -
@alexzelaya,我想将 JAVA_HOME 动态设置为 JAVA_HOME_x64 的值,即如果 JAVA_HOME_x64 将来发生变化,JAVA_HOME 将自动更新。
-
这不会反映在您的问题的任何地方。 stackoverflow.com/help/how-to-ask
标签: windows powershell environment-variables