如果我有 a.com、a.cmd、a.bat 和 a.exe 文件 %PATH%,如果我只调用命令“a”,Windows 会选择哪一个?这是由 M$ 官方指定的吗?
我只是想用 -n 包装我的 gvim.exe 可执行文件,但我的 gvim.bat 似乎既不能从命令行运行,也不能从“运行”对话框运行。
如果我有 a.com、a.cmd、a.bat 和 a.exe 文件 %PATH%,如果我只调用命令“a”,Windows 会选择哪一个?这是由 M$ 官方指定的吗?
我只是想用 -n 包装我的 gvim.exe 可执行文件,但我的 gvim.bat 似乎既不能从命令行运行,也不能从“运行”对话框运行。
请参阅Microsoft Docs 上的命令搜索序列
PATH 和 PATHEXT 环境变量各自提供搜索序列的元素:PATH 是要查找的目录“ where ”的有序列表,PATHEXT 是要查找的文件扩展名(“ what ”)的有序列表(如果扩展名没有在命令行上明确提供)。然而,在使用 PATH 之前,会搜索当前目录。
PATHEXT 变量默认为“.COM;.EXE;.BAT;.CMD”
从mjv提供的Microsoft Technet链接总结:
Windows 将从左到右逐步遍历 PATH 中的目录(正常列表顺序)。在其中的每一个中,它都会尝试查找每个 PATHEXT 也是从左到右的文件,然后再继续下一个 PATH 条目。它找到的第一个文件获胜。
因此,在您的情况下,您需要更改 PATHEXT 以便 .BAT 出现在 .EXE 之前(或者它总是会首先找到 .exe 而不是您最有可能想要覆盖它的 .bat ,如果在同一目录中)并且还放你的'覆盖'gvim.bat的路径在PATH列表中比它可以找到gvim的任何地方更早(最早?)
我相信它会遍历 %PATHEXT% 并尝试其中的每一个