我想从PATH
中删除%LocalAppData%\Microsoft\WindowsApps;
。但由于在Windows环境变量中使用了另一个变量,这是不可能的。在SS64中,使用了CALL
hack。(同时,感谢Jens A. Koch提供的基础命令。)
CALL set PATH=%PATH:%LocalAppData%\Microsoft\WindowsApps;=%
当然,使用SET
更改的PATH
不会是永久性的。要进行固定更改,需要使用SETX
命令或直接更改注册表中的条目。
实际上,不需要从PATH
中删除%LocalAppData%\Microsoft\WindowsApps;
来解决问题。
%LocalAppData%\Microsoft\WindowsApps;
存储在注册表的HKCU\Environment
键的PATH
条目中。虽然使用REG DELETE
命令删除此条目更为实用,但如果PATH
条目中有其他目录,则它们也将被删除,因此需要新的解决方案。
我无法从SET
中删除%USERPROFILE%
变量语法(%%
符号的困境)。幸运的是,PShell提供了帮助:
SET userprofile=
Powershell -c "$UserEnvironmentPath = [System.Environment]::GetEnvironmentVariable('Path', 'User'); $UserEnvironmentPath = $UserEnvironmentPath.Replace('%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;',''); [Microsoft.Win32.Registry]::SetValue('HKEY_CURRENT_USER\Environment', 'Path', $UserEnvironmentPath, [Microsoft.Win32.RegistryValueKind]::ExpandString)"
特别感谢vonpryz提供的最后一条命令。因为PowerShell的[System.Environment] :: SetEnvironmentVariable
命令将变量保存到注册表中,即使它们的原始值类型是REG_EXPAND_SZ
,这是已知问题。