Если две отдельные директории PATH содержат исполняемый файл с одинаковым именем, как Windows выберет?

1475
Coldblackice

Я нахожусь в процессе обновления PEAR (PHP) в моей системе. Сценарий обновления побуждает меня добавить «.. \ PHP \ PEAR» в мою переменную PATH, чтобы я мог использовать «pear.bat». Тем не менее, я уже могу использовать pear.bat.

Просматривая свой путь PATH, я вижу, что у меня нет каталогов PEAR, только мой каталог PHP. Открывая мой каталог PHP, я вижу, что в базе есть «pear.bat». Но в подпапке PEAR PHP также есть pear.bat. Мне интересно, если я потерял установку PEAR.

Я отвлекся. Так что, если я оставлю .. \ PHP на моем пути, но также добавлю .. \ PHP \ PEAR - у каждого из них есть "pear.bat" - какой из них "выберет" Windows? Как решает Windows?

2
Вы можете просто попробовать и посмотреть. Я ожидаю, что, поскольку PATH - упорядоченный список, будет использован первый найденный список. martineau 11 лет назад 0

2 ответа на вопрос

3
Ansgar Wiechers

Первый матч выигрывает. В pear.batкаталоге, который находится первым в каталоге, %PATH%выполняется:

  • PATH=..\PHP\PEAR;..\PHP: ..\PHP\PEAR\pear.batвыполнен
  • PATH=..\PHP;..\PHP\PEAR: ..\PHP\pear.batвыполнен
3
jaume

От http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/path.mspx?mfr=true :

Два или более идентичных имени файла в пути

Если в пути команд имеется два или более файлов с одинаковыми именем и расширением, Windows XP сначала ищет указанное имя файла в текущем каталоге, а затем ищет каталоги в пути команд в том порядке, в котором они перечислены в ПУТИ .

Согласен, это относится к Windows XP (я не могу найти никакой информации о других версиях Windows), но я не думаю, что это поведение изменилось.

РЕДАКТИРОВАТЬ: я мог бы найти некоторую информацию для Windows Server 2008 и Vista здесь: http://technet.microsoft.com/en-us/library/cc753427%28v=ws.10%29.aspx (почти тот же текст, что и выше):

Если два или более файлов в пути команды имеют одинаковые имя и расширение, путь сначала ищет указанное имя файла в текущем каталоге. Затем выполняется поиск каталогов в пути команды в том порядке, в котором они перечислены в переменной среды PATH .

кажется, подтверждает предположение, что поведение не изменилось в разных версиях Windows.