Windows 在 PATH 中搜索可执行文件的相对顺序是啥?

Posted

技术标签:

【中文标题】Windows 在 PATH 中搜索可执行文件的相对顺序是啥?【英文标题】:What's the relative order with which Windows search for executable files in PATH?Windows 在 PATH 中搜索可执行文件的相对顺序是什么? 【发布时间】:2010-12-11 19:51:55 【问题描述】:

如果我有 a.com、a.cmd、a.bat 和 a.exe 文件 %PATH%,如果我只调用命令“a”,Windows 会选择哪一个?这是 M$ 官方指定的吗?

我只是想用 -n 包装我的 gvim.exe 可执行文件,但我的 gvim.bat 似乎既不能从命令行运行,也不能从“运行”对话框运行。

【问题讨论】:

【参考方案1】:

请参阅 Microsoft Docs 上的 command search sequence

PATH 和 PATHEXT 环境变量各自提供搜索序列的一个元素:PATH 是要查找的目录“where”的有序列表,PATHEXT 是文件扩展名的有序列表(“what") 来查找(以防命令行上未明确提供扩展名)。但是,在使用 PATH 之前,会搜索当前目录。

PATHEXT 变量默认为“.COM;.EXE;.BAT;.CMD”

【讨论】:

我只是从运行对话框中调用 gvim,无论 PATHEXT 设置为什么,它都只有 gvim.exe 运行;即使我在运行对话框中说 gvim.bat。 @Jeenu,这很奇怪。然而,一个可能的解释是在您期望它的 PATH 位置之前找到了另一个 gvim 实例(或引用它的 bat 文件)。手动查看路径,就像控制台一样。 (或者另一种证明这一点的方法是暂时重命名您认为它来自的目录中的 exe,看看调用命令是否不会因找不到 exe 而失败。 感谢“如果没有在命令行中明确提供扩展名” 注意,这就是为什么python3.5 命令不能在Windows 上使用PATH... 【参考方案2】:

摘自mjv提供的Microsoft Technet链接:

Windows 将从左到右逐步遍历 PATH 中的目录(正常列表顺序)。 在其中的每一个中,它都会尝试定位一个文件,其中每个 PATHEXT 也是从左到右,然后继续下一个 PATH 条目。 它找到的第一个文件获胜。

因此,在您的情况下,您需要更改 PATHEXT 以便 .BAT 在 .EXE 之前出现(或者它总是会首先找到 .exe 而不是您最有可能想要覆盖它的 .bat,如果在同一目录中)并且还将你的“覆盖”gvim.bat 的路径更早地(最早?)放在 PATH 列表中,而不是它可以找到 gvim.* 的任何地方(因为它会尝试每个 PATHEXT 中的每个路径,然后再继续下 PATH)

【讨论】:

【参考方案3】:

我相信它会遍历 %PATHEXT% 并尝试其中的每一个

【讨论】:

以上是关于Windows 在 PATH 中搜索可执行文件的相对顺序是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Linux 下执行本目录的可执行文件(命令)为什么需要在文件名前加“./”

Docker 命令在 Windows 上的 Git Bash 中不起作用(执行:“com.docker.cli”:在 %PATH% 中找不到可执行文件)

path是啥意思

windows环境变量PATH顺序的重要性

path和classpath的区别

详解path和classpath的区别