Windows下PowerShell 读取环境变量Path时不展开其中变量的方法

在Windows系统中,Path环境变量有时包含未展开的系统内置变量,如%SystemRoot%。当读取Path时,通常会自动展开这些变量。但在修改Path时,直接读取展开后的值可能会导致原有配置形式改变。为避免这种情况,可以从PowerShell官方开源仓库论坛找到解决方案,使用特定方法读取Path的字面值。此外,还介绍了三个用于管理Path的自定义函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文也发布在笔者的个人站点icon-default.png?t=M5H6https://curious.host

Windows很多预置的Path项中包含变量,形如:

%SystemRoot%\System32\Wbem

其中%SystemRoot%就代表一个系统内置变量(Path实际上也是这样的变量),程序或者我们读取这个Path时会自动将之展开成:

C:\WINDOWS\System32\Wbem

这是因为Path是以注册表值的形式存储在系统中的,而它的值类型是REG_EXPAND_SZ,即可展开字符串。这种自动展开的行为对于要使用Path的程序来说是正确的,或者说它的设计目标就是如此。

但对于小部分用法却会造成一定的副作用,比如,我们需要修改Path。在修改Path时我们首先需要读取Path,我们的预期目标是,读取出Path的字面值,然后加上或者去掉我们要修改的内容,再把它写回注册表。

然而,常规的读取方法,无论是注册表、.net类库还是PowerShell的内置方法,读取Path时返回的都不是字面值而是其中变量展开后的形式。这就造成一个后果:我们修改完Path再写回时,Path中原有条目的形式都被展开了,虽然实际效果没变,但这也是一种副作用。

作为一个强迫症,我不希望我的程序去改动用户原有的不相关配置。所以我一直在找解决方案,终于,还是PowerShell官方开源仓库论坛里的老哥提供了有效的方法,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值