如何从cmd永久更新PATH变量?视窗

如果我set PATH=%PATH%;C:\\Something\\bin从cmd 执行然后执行,echo %PATH%我会在路径中看到此字符串。如果我关闭并打开cmd,则该新字符串不在PATH中。将来如何从cmd永久更新PATH,而不仅限于当前进程?我不想通过转到系统属性->高级->环境变量来执行此操作,并在那里更新PATH。

汪汪一只猫
浏览 2227回答 3
3回答

动漫人物

有关如何执行此操作的文档可以在MSDN上找到。关键摘录是这样的:要以编程方式添加或修改系统环境变量,请将它们添加到HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Environment注册表项中,然后广播一条WM_SETTINGCHANGE消息,其中lParam设置为字符串“ Environment”。这使应用程序(例如外壳程序)可以获取您的更新。请注意,您的应用程序将需要提升的管理员权限才能修改此密钥。您可以在评论中指出您很乐意仅修改每个用户的环境。通过编辑HKEY_CURRENT_USER \ Environment中的值来执行此操作。和以前一样,请确保您广播了一条WM_SETTINGCHANGE消息。您应该能够使用JNI注册表类在Java应用程序中轻松地完成此操作。

眼眸繁星

您可以使用:setx PATH "%PATH%;C:\\Something\\bin"但是,setx会将存储的字符串截断为1024个字节,可能会损坏PATH。/M将更改PATHin HKEY_LOCAL_MACHINE而不是HKEY_CURRENT_USER。换句话说,是系统变量,而不是用户变量。例如:SETX /M PATH "%PATH%;C:\your path with spaces"您必须记住,新的PATH在您当前的中不可见cmd.exe。但是,如果您查看注册表或使用新的注册表cmd.exe,则"set p"可以看到新值。

小唯快跑啊

这个Python脚本[*]正是这样做的:"""Show/Modify/Append registry env-vars (ie `PATH`) and notify Windows-applications to pickup changes.First attempts to show/modify HKEY_LOCAL_MACHINE (all users), and if not accessible due to admin-rights missing, fails-back to HKEY_CURRENT_USER.Write and Delete operations do not proceed to user-tree if all-users succeed.Syntax:     {prog}                  : Print all env-vars.     {prog}  VARNAME         : Print value for VARNAME.     {prog}  VARNAME   VALUE : Set VALUE for VARNAME.     {prog}  +VARNAME  VALUE : Append VALUE in VARNAME delimeted with ';' (i.e. used for `PATH`).     {prog}  -VARNAME        : Delete env-var value. Note that the current command-window will not be affected, changes would apply only for new command-windows."""import winregimport os, sys, win32gui, win32condef reg_key(tree, path, varname):    return '%s\%s:%s' % (tree, path, varname) def reg_entry(tree, path, varname, value):    return '%s=%s' % (reg_key(tree, path, varname), value)def query_value(key, varname):    value, type_id = winreg.QueryValueEx(key, varname)    return valuedef yield_all_entries(tree, path, key):    i = 0    while True:        try:            n,v,t = winreg.EnumValue(key, i)            yield reg_entry(tree, path, n, v)            i += 1        except OSError:            break ## Expected, this is how iteration ends.def notify_windows(action, tree, path, varname, value):    win32gui.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE, 0, 'Environment')    print("---%s %s" % (action, reg_entry(tree, path, varname, value)), file=sys.stderr)def manage_registry_env_vars(varname=None, value=None):    reg_keys = [        ('HKEY_LOCAL_MACHINE', r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'),        ('HKEY_CURRENT_USER', r'Environment'),    ]    for (tree_name, path) in reg_keys:        tree = eval('winreg.%s'%tree_name)        try:            with winreg.ConnectRegistry(None, tree) as reg:                with winreg.OpenKey(reg, path, 0, winreg.KEY_ALL_ACCESS) as key:                    if not varname:                        for regent in yield_all_entries(tree_name, path, key):                            print(regent)                    else:                        if not value:                            if varname.startswith('-'):                                varname = varname[1:]                                value = query_value(key, varname)                                winreg.DeleteValue(key, varname)                                notify_windows("Deleted", tree_name, path, varname, value)                                break  ## Don't propagate into user-tree.                            else:                                value = query_value(key, varname)                                print(reg_entry(tree_name, path, varname, value))                        else:                            if varname.startswith('+'):                                varname = varname[1:]                                value = query_value(key, varname) + ';' + value                            winreg.SetValueEx(key, varname, 0, winreg.REG_EXPAND_SZ, value)                            notify_windows("Updated", tree_name, path, varname, value)                            break  ## Don't propagate into user-tree.        except PermissionError as ex:            print("!!!Cannot access %s due to: %s" %                     (reg_key(tree_name, path, varname), ex), file=sys.stderr)        except FileNotFoundError as ex:            print("!!!Cannot find %s due to: %s" %                     (reg_key(tree_name, path, varname), ex), file=sys.stderr)if __name__=='__main__':    args = sys.argv    argc = len(args)    if argc > 3:        print(__doc__.format(prog=args[0]), file=sys.stderr)        sys.exit()    manage_registry_env_vars(*args[1:])下面是一些用法示例,假设已将其保存在setenv.py当前路径中某个位置的文件中。请注意,在这些示例中,我没有admin权限,因此更改仅影响本地用户的注册表树:> REM ## Print all env-vars> setenv.py!!!Cannot access HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session   Manager\Environment:PATH due to: [WinError 5] Access is deniedHKEY_CURRENT_USER\Environment:PATH=......> REM ## Query env-var:> setenv.py PATH C:\foo!!!Cannot access HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session   Manager\Environment:PATH due to: [WinError 5] Access is denied!!!Cannot find HKEY_CURRENT_USER\Environment:PATH due to: [WinError 2] The system cannot find the file specified> REM ## Set env-var:> setenv.py PATH C:\foo!!!Cannot access HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session   Manager\Environment:PATH due to: [WinError 5] Access is denied---Set HKEY_CURRENT_USER\Environment:PATH=C:\foo> REM ## Append env-var:> setenv.py +PATH D:\Bar!!!Cannot access HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session   Manager\Environment:PATH due to: [WinError 5] Access is denied---Set HKEY_CURRENT_USER\Environment:PATH=C:\foo;D:\Bar> REM ## Delete env-var:> setenv.py -PATH!!!Cannot access HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session   Manager\Environment:PATH due to: [WinError 5] Access is denied---Deleted HKEY_CURRENT_USER\Environment:PATH[*]改编自:http : //code.activestate.com/recipes/416087-persistent-environment-variables-on-windows/
打开App,查看更多内容
随时随地看视频慕课网APP