PowerShell中doskey /macros:all输出带引号残留宏条目如何清除
异常带引号doskey条目的本质
这个残留条目是PowerShell变量预解析与doskey参数解析规则冲突生成的无效垃圾宏定义,并非系统内置宏:
- 首次执行
doskey envpath=$env:Path -split ';'时,由于没有对$符号做转义,PowerShell会在命令执行前就把$env:Path替换为当时的Path环境变量实际值,最终传给doskey程序的参数变成了envpath=C:\WINDOWS\system32;C:\WINDOWS;<其余Path值>; -split ; - doskey原生沿用cmd的参数解析逻辑,会把
;识别为命令分隔符,传入的参数被分号切割成多段后解析逻辑出错,生成了宏名带前导双引号、内容残缺的无效条目。由于该条目的实际宏名不是envpath,而是包含特殊引号字符的异常名称,常规的doskey envpath=删除命令无法匹配到对应条目,因此会一直残留。 - doskey宏默认是进程级存储,不会自动写入系统配置持久化保存。
彻底清除方案
- 最简单的方案:关闭当前所有打开的PowerShell窗口后重新打开,进程退出时绑定的所有doskey宏(包括这个异常条目)会被自动释放清空,不会残留到新的PowerShell进程中。
- 如果需要保留当前PowerShell窗口的工作状态,执行以下两行命令即可清空当前进程内所有doskey宏:
第一行命令将doskey宏缓冲区大小设置为0,会强制清空当前进程内存储的全部宏定义;第二行将缓冲区大小恢复为常用默认值即可。doskey /listsize=0 doskey /listsize=50 - 后续定义可实时读取当前Path的对应宏时,需要用PowerShell转义符反引号
`转义$符号,避免PowerShell提前解析变量,正确写法如下:doskey envpath=`$env:Path -split ';'
内容的提问来源于stack exchange,提问作者DavidT
相关产品推荐
相关产品推荐

