使用 setx 突破 1024 个字符的限制

使用 setx 突破 1024 个字符的限制

我正在尝试使用设置环境变量setx命令,例如如下

setx PATH "f:\common tools\git\bin;f:\common tools\python\app;f:\common tools\python\app\scripts;f:\common tools\ruby\bin;f:\masm32\bin;F:\Borland\BCC55\Bin;%PATH%"

但是,如果值的长度超过 1024 个字符,则会出现以下错误:

警告:正在保存的数据被截断为 1024 个字符。

成功:指定的值已保存。

但是最后的一些路径没有保存在变量中,我猜是由于错误提示的字符限制。

答案1

最好的办法是直接编辑注册表。

导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment并编辑该Path值(然后重新启动以激活新值)。

但请注意,虽然您可以输入很长的路径(最多为最大环境变量长度);2,048或者32,768字节(具体取决于源),如果太长,并非所有软件都能够读取并正确处理它。

答案2

如果您使用的是 Windows Vista 或更高版本,您可以创建一个symbolic link文件夹。例如:

mklink /d C:\pf "C:\Program Files"
mklink /d C:\pf86 "C:\Program Files (x86)"

会生成一个链接,所以c:\pf会是你的程序文件夹。我使用这个技巧从路径中删去了 300 个字符。

(我知道它与 setx 无关,但对于搜索超过 1024 个字符限制的人来说很有用)

答案3

您可以使用类似于以下内容的 PowerShell 脚本:

$newPath = 'F:\common tools\git\bin;F:\common tools\python\app;F:\common tools\python\app\scripts;F:\common tools\ruby\bin;F:\masm32\bin;F:\Borland\BCC55\Bin'
$oldPath = [Environment]::GetEnvironmentVariable('PATH', 'Machine');
[Environment]::SetEnvironmentVariable('PATH', "$newPath;$oldPath",'Machine');

Environment.SetEnvironmentVariable()API 调用将广播WM_SETTINGCHANGE所以您不需要重新启动。

答案4

比 setx 更优秀的路径操作工具是路径检查程序。不幸的是,它仅限于编辑路径。

除了比 setx 更好的用户体验之外,您还不受 1024 个字符的限制。与直接注册表操作不同,此应用程序使用环境.设置环境变量()将广播的 API 调用WM_SETTINGCHANGE

相关内容