TechWindows

Post

警惕 PATH 环境变量过长被截断

2026年5月2日
更新于 2026年5月2日
454
3 分钟

背景

电脑用得好好的,突然发现命令行里 ffmpeg codex gemini uv 等命令行工具都打不开了,赶紧去查看了安装目录,文件都还在,那问题肯定出在环境变量了。

打开环境变量一看天塌了,环境变量直接被大砍一刀,数了数 Path 的长度,刚好 1024 字。

根据推测,应该是有哪个程序在更新的时候通过 batch 的 setx PATH "%PATH%;xxx" 更新了环境变量,而 setx 在超出 1024 字时会强制截断,导致了惨剧发生。(2026年还在用这个真是个神人)

解决方案

急救

从旧进程读取环境变量。

还好发现问题时还没有关机,进程在读取环境变量后会创建一个进程级的快照,而我们可以用 System Informer 或其他工具从事发之前的读取过 PATH 的进程中读取原先的完整 PATH 环境变量,将其用于还原。如果你恰好有事发之前的终端,也可以直接打印出来

powershell
$env:Path

如果你已经重启了,下面还有 Plan B。

查看 ControlSet 备份

powershell
reg query "HKLM\SYSTEM\ControlSet001\Control\Session Manager\Environment" /v Path
reg query "HKLM\SYSTEM\ControlSet002\Control\Session Manager\Environment" /v Path
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path

系统还原点

如果你之前创建过系统还原点,也可以通过还原来恢复。

bash
rstrui.exe

根本上解决问题

问题的根源是使用 setx 会阶段 Path 到 1024,我们可以把部分 Path 提取到单独的环境变量,比如说 MyPath,然后在 Path 中通过 %MyPath% 引用它,不影响使用,且可以大幅减少 Path 长度。

当然也可以直接 AppLocker 阻止 setx 运行。

Yachiyo~~