Каков относительный порядок, в котором Windows ищет исполняемые файлы в PATH? - PullRequest
25 голосов
/ 31 октября 2009

Если у меня есть файлы a.com, a.cmd, a.bat и a.exe% PATH%, какой из них выберет Windows, если я вызову только команду «a»? Это где-то официально указано M $?

Я просто хотел обернуть мой исполняемый файл gvim.exe с -n, но мой gvim.bat, похоже, не запускается ни из командной строки, ни из диалога Run.

Ответы [ 3 ]

14 голосов
/ 31 октября 2009

См. Последовательность поиска команды в Microsoft Technet

Каждая переменная окружения PATH и PATHEXT предоставляет элемент последовательности поиска: PATH - это упорядоченный список каталогов ", где ", а PATHEXT - упорядоченный список расширений файлов (" что") искать (если расширение явно не указано в командной строке). Однако перед использованием PATH выполняется поиск в текущем каталоге.

По умолчанию переменная PATHEXT имеет значение ".COM; .EXE; .BAT; .CMD"

12 голосов
/ 26 октября 2013

Суммировано по ссылке Microsoft Technet, предоставленной mjv:

Windows будет проходить по каталогам в PATH слева направо (нормальный порядок списка). В каждом из них он пытается найти файл с каждым PATHEXT, также слева направо, прежде чем перейти к следующей записи PATH. Первый найденный файл выигрывает.

Итак, в вашем случае вам нужно изменить PATHEXT так, чтобы .BAT предшествовал .EXE (или он всегда будет сначала находить .exe, а не тот .bat, который вы, скорее всего, захотите переопределить, если он находится в том же каталоге) и также поместите путь вашего «переопределить» gvim.bat раньше (раньше?) в список PATH, чем где бы он ни находил gvim. * (потому что он пробует каждый PATHEXT в каждом перед тем, как идти вниз по PATH)

2 голосов
/ 31 октября 2009

Я полагаю, что он проходит через% PATHEXT% и пытается каждый из этих

...