如何在不访问Registry的情况下仅返回环境变量中的用户Path?

时间:2016-05-25 18:17:00

标签: python windows batch-file path environment-variables

这是我想要实现的目标: 我正在编写一个基于Python的软件,它需要在Windows中的环境变量中将新目录附加到 PATH 。为了做到这一点,我先获取路径,然后修改字符串,最后使用SETX更新新的PATH。

我的问题: 我尝试了三种方法来获取PATH(使用python或cmd),但它们都返回了USER PATH和SYSTEM PATH的组合。这三种方法是:

os.environ['PATH']
os.system('echo %PATH%')
os.system('set PATH')

我无法接受用户路径和系统路径的组合,因为这会导致新用户PATH太长,并被截断为1024个字符(由Microsoft限制)。我已经阅读了一个完全相同问题的帖子。在这种情况下,使用注册表似乎可以解决问题:http://stackoverflow.com/questions/13359082/windows-batch-select-only-user-variables。解决方案建议使用

reg query HKCU\Environment /v PATH

访问注册表,其中用户变量和系统变量是分开的。 但解决方案对我不起作用。当我在推荐行上运行时,它返回我"访问被拒绝"。 因此,我正在寻找只返回环境变量中的用户Path而无法访问Registry的方法。谢谢。

1 个答案:

答案 0 :(得分:2)

import _winreg
import unicodedata
keyQ = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, 'Environment', 0, _winreg.KEY_QUERY_VALUE)
path_old, _ = _winreg.QueryValueEx(keyQ, "PATH")
#the result is unicode, need to be converted
unicodedata.normalize('NFKD', path_old).encode('ascii','ignore')

虽然我说我想要一个无法访问注册表的答案,但事实证明这是获取用户环境变量的唯一方法" PATH"。谢谢大家。