环境变量PATH超长问题[转]

症状回放:

最近安装一个Delphi的控件,结果,在安装之后启动Delphi时出现了找不到相关文件的错误。一开始以为是Delphi内的Library路径没有添加,查看,一切正常。再次启动Delphi,提示说将xxx路径插入到PATH环境变量中失败,原因是PATH变量超出长度限制。

查找根源:

根据Delphi的提示,打开环境变量设置窗口,发现PATH变量确实不短(安装了很多开发工具,很多都需要设置环境变量),由于那个控件存在独立运行环境,需要写入系统PATH环境变量。但偏偏这个控件的名字又长的要命。先前有同学告诉我,PATH太长可以使用别名来解决,即创建其它名称的环境变量,并在PATH中使用两个“%”来引用,于是将一部分PATH路径拿出来,新建了一个环境变量并在PATH中引用。

再启动Delphi,咦?另一个文件又找不到了。反复检查发现,刚刚建立的环境变量已经起作用,但另外的路径又丢失了。于是打开CMD控制台,输入PATH,才发现,PATH变量的值已经被截断,原来那个使用别名的方法只是治标不治本。单条PATH变量可以插入了,变量值的长度限制还是存在。难道,非要我把每个程序都安装到短文件路径中?

偏方医治:

当我无奈中想到重装程序到短文件路径时,突然拉亮了另一盏灯。对,DOS8.3格式的短文件名!(哈哈,当时我叫出来的第一句就是,你太有才了…)。所谓DOS8.3格式短文件名就是文件或目录名分8字节主文件名和一个点加3字节的扩展名,在非DOS时代的系统,虽然文件名可以超出这个限制,但仍然可以使用该规则来操作文件名,即使用我们经常见到的“~n”方式。

那么,既然很多文件夹名称都那样的长(比如MS SQLSERVER的Microsoft SQL Server文件夹),那使用DOS8.3格式的短文件名来压缩路径,不就可以起到缩短PATH路径的作用了?

但是,我们又如何获取一个文件或目录的短文件名呢?其实系统已经给我们提供了这个工具,很简单,在CMD控制台中运行 dir /n /x,那么当前目录下的文件名就以长/短两种方式显示出来,接下来就不用我说了吧…

后记:

现在需要PATH环境变量的程序越来越多,PATH的空间也越来越小,真不知道此问题要何时才能解决。刚刚我在Microsoft的网站上找到了一个关于PATH长度限制补丁的说明,但由于整篇指东言西的描述让人匪夷所思,大概是有一个可以把PATH扩展到2046字节的补丁已经发出来,可是始终没找到下载地址。本文叙述的方法也仅仅是治标不治本,但在不限制长度PATH环境变量出现之前,其不失为一种这种方法。

时间: 2025-01-14 18:55:00

环境变量PATH超长问题[转]的相关文章

Linux下修改环境变量PATH

1.什么是环境变量(PATH) 在Linux中,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行. 我们知道查阅文件属性的指令ls 完整文件名为:/bin/ls(这是绝对路径), 那你会不会觉得很奇怪:"为什么我可以在任何地方执行/bin/ls这个指令呢? " 为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量 PATH 的帮助所致呀! 当我们在执行一个指令癿时候,举例

变量的声明及其作用域、脚本、修改环境变量$PATH【:VALUE】

变量的声明及其作用域 本地变量 VARNAME=VALUE:作用域为整个bash进程[打开新的shell进程,没有该变量] [root@jiakang a]# A=123 [root@jiakang a]# bash [root@jiakang a]# echo $A [root@jiakang a]# 局部变量 local VARNAME=VALUE:作用域为当前代码段 环境变量 作用域为当前shell及其子进程[打开一个shell就是一个进程] export VARNAME=VALUE或者

hash和环境变量PATH

hash命令和$PATH bash命令补全: 在linux中用户键入命令时敲TAB键的时候,它会去查找以用户所给定的起始字符串或开头字符串在PATH的环境变量所指明的各路径下,自左而右,逐一去搜索是否有一个应用程序的名称被用户给定的字符串打头的字符串唯一进行标示,如果有则把后面剩余的字符进行补全,如果无法唯一被标示,两次TAB列出所有的以此打头的的内容.而hash命令就是为了缓存此前命令的查找结果! hash 简介:记录或显示程序位置: shell通过环境变量PATH来定义应用程序文件查找路径,

Ubuntu修改环境变量PATH方法

在LINUX安装一些软件通常要添加环境变量.环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就可以执行.比如常用的ls命令就是添加好了环境变量才可以直接执行ls 环境变量的名字是PATH,$符号用于读取变量的值,终端输入echo $PATH返回如下,各路径用:隔开 echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/ga

Linux系统下修改环境变量PATH路径的三种方法

比如要把/etc/apache/bin目录添加到PATH中,方法有三: 1.#PATH=$PATH:/etc/apache/bin 使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效 2.#vi /etc/profile 在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格) 这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变 3.#vi ~/.bash_profile 修改PATH行,把/et

黑马程序员——java环境变量path和classpath

1.path的作用 path是用来指定java可执行文件的完整路径的,其实即使不在path中设置JDK的路径也可以执行java文件,但必须写下完整路径,如D:\Program Files\Java\jdk1.6.0_10\bin\javac Test.java,如果设置了环境变量path,如:path=D:\Program Files\Java\jdk1.6.0_10\bin,当执行java命令的时候操作系统会自动去该路径下寻找这个可执行程序,大大的方便书写. 2.classpath的作用 cl

Linux系统中增加和删除环境变量PATH路径详解

http://blog.csdn.net/pipisorry/article/details/39507699 Linux系统中要把/etc/apache/bin目录添加到PATH中: 1.#PATH=$PATH:/etc/apache/bin 使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后(关闭terminal就会失效),PATH 设置就会失效 2.#vi /etc/profile 在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能

Linux 环境变量 $PATH

我们知道查阅文件属性的指令 ls 完整文件名为:/bin/ls(这是绝对路径),那为什么可以在任何地方执行/bin/ls 这个指令呢?  为什么在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量 PATH ! 当我们在执行一个指令的时候,比如ls,系统会依照 PATH 的每个 PATH 定义的目录下搜寻文件名为 ls 的可执行文件, 如果在 PATH 定义的目录中含有多个文件名为 ls 的可执行文件,那么先搜寻到的同名指令先被执行! ec

2.10 环境变量PATH 2.11 cp命令 2.12 mv命令 2.13 文档查看cat/more/less/head/tail

2.10 环境变量PATH 2.11 cp命令 2.12 mv命令 2.13 文档查看cat/more/less/head/tail 2.10 环境变量PATH 如果你的目录在这里面 那么你敲命令句不需要敲绝对路径 但是如果再打开一个终端, 怎么让永久生效呢 系统有一个文件,是可以让它开机 或者是每次打开终端 都回去加载命令的 cat 一下看下文件有没有加上 命令 再打开一个终端 也是可以的 如果先取消掉 就重新改下变量PATH 还可以把里面的命令删掉 vi /etc/profile 重新退出