【问题标题】:Python deletion from env variable - with a twist从 env 变量中删除 Python - 有点扭曲
【发布时间】:2016-07-07 23:09:37
【问题描述】:

我在工作电脑上使用 Windows 7,并尝试完成 Python27 的卸载。

如果我打开 cmd 并输入 path 然后我可以看到包含 ;C:\Python27\;C:\Python27\Scripts\; 的环境变量列表

如果我点击以下Computer > Properties > Advanced System Settings > Environment Variables.. > Pth,那么我看到的值不包含;C:\Python27\;C:\Python27\Scripts\;

为什么我会看到这种不一致?一个是所有用户的路径,另一个是我的路径吗?

如何从路径的所有视图中删除;C:\Python27\;C:\Python27\Scripts\;?如何使用 PS 删除那部分路径? (不要全部删除!)

【问题讨论】:

  • 卸载后重启机器了吗?
  • @Martin 几次;我什至使用了 regedit 并删除了 C:/Python27 的条目。有没有一种优雅的方式来编辑这个path 字符串使用powershell,目的是删除字符串中间的一个部分,即删除这个位;C:\Python27\;C:\Python27\Scripts\;
  • @Martin 也许一个是机器级路径,另一个是用户级? Path env 变量可以有 2 个不同的值吗?
  • 是的,PATH 环境变量是 2 个设置的叠加:用户和系统路径。两个都查了吗?在 PowerShell 中尝试 [Environment]::GetEnvironmentVariable('path', 'user')[Environment]::GetEnvironmentVariable('path', 'machine')
  • 您可以使用 Terminator 进行拆分;然后选择所有没有“Python27”的子字符串,使用 ; 重新加入它并使用结果设置路径变量。或者您为此使用正则表达式。

标签: python powershell cmd environment-variables


【解决方案1】:

显然这两个 Python 文件夹列在 SYSTEM 环境的 PATH 设置中。以管理员身份编辑该设置,或以管理员权限运行以下命令:

$python_paths = 'C:\Python27\', 'C:\Python27\Scripts\'

$mpath = [Environment]::GetEnvironmentVariable('PATH', 'Machine') -split ';' |
         Where-Object { $paths -notcontains $_ }

[Environment]::SetEnvironmentVariable('PATH', ($mpath -join ';'), 'Machine')

要删除任何 Python 2.7 路径,请将 Where-Object 过滤器更改为通配符匹配:

... | Where-Object { $_ -notlike 'C:\Python27*' }

【讨论】:

  • 我会简单地采用这种方法:... | Where-Object { $_ -notmatch 'Python27' },我想知道正则表达式变体会是什么样子。
  • 嗯... 正则表达式变体。但是,它对我的​​口味来说有点太不具体了,因为它会匹配路径中任何位置的字符串 python27
  • "具有管理员权限" ...我可以通过 PS 脚本添加一个临时设置来赋予自己这些权限?
  • 我必须拥有所需的权限,因为它似乎工作正常
  • 您可以在“runas”模式下重新运行脚本,以便以提升权限运行(如果您是管理员组的成员)或提示输入凭据(如果您不是),或者您可以使用显式凭据运行代码(脚本、脚本块等)。不过,这是一个不同的问题。已经回答了好几次了。
猜你喜欢
  • 2010-10-02
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多