为了账号安全,请及时绑定邮箱和手机立即绑定

是否有命令从Windows中的命令提示符刷新环境变量?

是否有命令从Windows中的命令提示符刷新环境变量?

慕妹3146593 2019-08-24 14:37:30
是否有命令从Windows中的命令提示符刷新环境变量?如果我修改或添加环境变量,我必须重新启动命令提示符。是否有一个我可以执行的命令可以在不重新启动CMD的情况下执行此操作?
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

如果您只需要在Windows中刷新环境变量,请从终端运行refreshenv,而不是重新启动PC。


查看完整回答
反对 回复 2019-08-24
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

感谢您发布这个非常有趣的问题,即使在2019年(事实上,更新shell cmd并不容易,因为它是如上所述的单个实例),因为在Windows中更新环境变量可以完成许多自动化任务而无需必须手动重启命令行。

例如,我们使用它来允许在我们定期重新安装的大量机器上部署和配置软件。我必须承认,在部署我们的软件期间不得不重新启动命令行是非常不切实际的,并且需要我们找到不一定令人愉快的解决方法。让我们来解决我们的问题。我们按如下方式进行。

1 - 我们有一个批处理脚本,它反过来调用这样的powershell脚本

[file:task.cmd]

CMD > powershell.exe -executionpolicy unrestricted -File C:\path_here\refresh.ps1

2 - 此后,refresh.ps1脚本使用注册表项(GetValueNames()等)更新环境变量。然后,在相同的PowerShell脚本中,我们只需调用新的环境变量即可。例如,在典型的情况下,如果我们之前使用静默命令安装了nodeJS,则在调用该函数之后,我们可以直接调用npm在同一会话中安装如下的特定软件包。

[file:refresh.ps1]

function Update-Environment {
    $locations = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session  Manager\Environment',
                 'HKCU:\Environment'
    $locations | ForEach-Object {
        $k = Get-Item $_
        $k.GetValueNames() | ForEach-Object {
            $name  = $_
            $value = $k.GetValue($_)
            if ($userLocation -and $name -ieq 'PATH') {
                $env:Path += ";$value"
            } else {
                Set-Item -Path Env:\$name -Value $value
            }
        }
        $userLocation = $true
    }}Update-Environment#Here we can use newly added environment variables like for example npm install.. npm install -g create-react-app serve

powershell脚本结束后,cmd脚本继续执行其他任务。现在,要记住的一件事是,在任务完成后,cmd仍然无法访问新的环境变量,即使powershell脚本已在其自己的会话中更新了这些变量。这就是为什么我们在powershell脚本中执行所有需要的任务,当然可以调用与cmd相同的命令。


查看完整回答
反对 回复 2019-08-24
  • 3 回答
  • 0 关注
  • 5199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信