本文也发布在笔者的个人站点
https://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中原有条目的形式都被展开了,虽然实

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

被折叠的 条评论
为什么被折叠?



