4

Как разработчик я устанавливаю и запускаю множество приложений. Для доступа к ним из командной строки используется обычный механизм добавления приложений в переменную среды PATH. Это нормально, но приводит к грязному, большому, непроходимому ПУТИ.

Я хочу привести это в порядок, имея единственный каталог, например, c:\dev который содержит символические ссылки на все приложения. Я могу создать символические ссылки в порядке с mklink, например, mklink eclipse.exe c:\dev\eclipse\eclipse.exe .

Для примера Eclipse, когда я пробую новую символическую ссылку, я получаю сообщение об ошибке в сопутствующей библиотеке. Для других приложений (например, Notepad++) я получаю другую ошибку.

ОДНАКО, когда я набираю тот же путь непосредственно в командной строке, например, c:\dev\eclipse\eclipse.exe все работает.

Таким образом, символическая ссылка eclipse.exe => c:\dev\eclipse.exe отличается от простого c:\dev\eclipse.exe . Я надеялся (вздыхал) и предполагал (дох!) что символическая ссылка будет работать так же, как и прямой ввод полного пути.

IOW, почему symlink => c:\dev\eclipse.exe не эквивалентно вводу c:\dev\eclipse.exe?

Есть ли способ обойти это? Я знаю, что могу писать небольшие командные файлы, но я надеялся избежать этого (символические ссылки кажутся чище).

Это особенность Windows или Linux такой же?

2 ответа2

5

Позвольте мне проиллюстрировать проблему на примере. Я создал простой однострочный пакетный файл Test.bat в C:\Program Files со следующим содержимым:

@echo Batch dir = "%~dp0"

Теперь из D:\ если я вызываю командный файл с помощью C:\Program Files\Test , он говорит:

Batch dir = "C:\Program Files\"

Если я изменяю PATH, используя set path=%path%;C:\Program Files и запускаю командный файл с простым Test , он говорит:

Batch dir = "C:\Program Files\"

Наконец, если я создаю символическую ссылку с помощью mklink Test.bat "C:\Program Files\Test.bat" и вызываю ее с помощью простого Test , он говорит:

Batch dir = "D:\"

Как видите, текущий рабочий каталог в этом случае отличается. Неудивительно, что ваши приложения жалуются на отсутствие файлов в каталоге исполняемого файла.

Если вы не хотите добавлять много каталогов в PATH, просто добавьте один, который содержит командные файлы для каждого из ваших приложений.

1

2 хороших ответа уже объясняют, что происходит. Лучший способ решить эту проблему - не создавать символическую ссылку в папке c:\dev, а вместо этого создавать файл .cmd или .bat в папке c:\dev и размещать там инструкции для запуска самого файла.

Вы используете Eclipse в качестве примера, поэтому я буду использовать и его.

В c:\dev вы создаете файл с именем eclipse.bat со следующим содержимым:

@echo off
start "c:\dev\eclipse\eclipse.exe %*"

или если вам нужно установить путь, потому что программа не может найти свои файлы, используйте:

@echo off
cd /d c:\dev\eclipse
start "eclipse.exe %*"

Теперь, если вы введете eclipse, он сначала будет искать eclipse.exe в текущем каталоге. Он не находит его, поэтому он пытается eclipse.com, .bat и .cmd в текущем рабочем каталоге. Он не находит этого, поэтому он расширяет поиск в том же порядке, что и путь. Он найдет c:\dev\eclipse.bat и выполнит то, что вы хотите.

Обратите внимание, я использую start в файле .bat, чтобы вы вернули командную строку после запуска приложения. В некоторых случаях это требуется, особенно при работе с программами, которые поддерживают параметры командной строки.

РЕДАКТИРОВАТЬ: добавил% *, чтобы добавить поддержку параметров. Это необязательно, но таким образом вы можете использовать его. EDIT2: добавлено 2 разных файла .bat, чтобы вы могли увидеть, какой из них подходит вам лучше всего. tnx DanielB за предложение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .