13

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

Я хотел бы сделать одну запись в моей переменной PATH, которая позволит получить доступ к CMD_Software и всем каталогам, которые он содержит, из командной строки.

Я пробовал C:\Users\myuser\CMD_Software\* но ничего не сделал. В этот момент у меня кончились идеи.

Обратите внимание, что я не пытаюсь установить новый путь в терминале, я пытаюсь установить новый путь в "Переменных среды", доступных на вкладке "Дополнительно" в свойствах системы.

4 ответа4

11

Переменная PATH не поддерживает подстановочные знаки или рекурсию. Это по замыслу.

Есть два возможных обходных пути, которые я использовал в некоторых случаях:

  • Создайте каталог с простыми пакетными файлами и добавьте этот каталог в PATH. Каждый пакетный файл может запустить нужную вам программу, например:

    :: CMD_Software.bat: start CMD_Software
    @C:\Users\myuser\CMD_Software\CMD_Software.exe %*
    

    Первая строка - это комментарий, вторая начинается с @ чтобы не показывать выполняемую команду, а %* используется для передачи любых аргументов командной строки в EXE.

  • Добавьте псевдонимы в CMD.EXE:

    DOSKEY CMD_Software="C:\Users\myuser\CMD_Software\CMD_Software.exe" $*
    

    Это по существу переводит CMD_Software в командной строке на все после знака равенства. $* Заменяется предоставленными аргументами.

Я предпочитаю второй подход, потому что вы можете сгруппировать все псевдонимы в один файл (см. Ключ «/MACROFILE» в DOSKEY /?) и запускать его каждый раз, когда интерпретатор команд начинает использовать параметр реестра (см. ключ "Автозапуск" в CMD /?).

Недостаток второго метода заключается в том, что псевдонимы работают только в начале командной строки. Это может быть проблемой, если вы хотите объединить команды. Например, CLS & CMD_Software не будет работать, если вы не поместите псевдоним в отдельной строке, используя скобки:

CLS & (
CMD_Software
)

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

4

Это то, что я использую для решения проблемы. Скопируйте этот скрипт ниже и сохраните его как FIXPATH.BAT в папку, которую вы добавили в переменную среды PATH . Например:

C:\Users\myuser\CMD_Software\

Теперь, когда вам нужно запустить программу, которая находится в подпапке, скажите ...

C:\Users\myuser\CMD_Software\unixutils\grep.exe
or
C:\Users\myuser\CMD_Software\imagetools\exiftool.exe

Сначала запустите fixpath затем введите команду (например, grep или exiftool) следующим образом:

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\myuser>fixpath
C:\Users\myuser>exiftool


FIXPATH.BAT
setlocal EnableDelayedExpansion
cd /D %~dp0

for /R %%d in (.) do (
    set "dirs=!dirs!;%%d"
)

path=%path%!dirs!
(endlocal
    set "ret=%PATH%"
)
cmd /K "title [#] Path Fixed [#] && path %ret%"
exit /B

Благодаря ответу @ VonC

1

Поместите подкаталог "programlinks\" в ...\CMD_Software (или где угодно, на самом деле) и заполните его символическими ссылками или жесткими ссылками на каждый исполняемый файл, к которому вы хотите получить доступ. Тогда достаточно одной записи в PATH для ...\ программных ссылок.

0

Если вы не слишком расстроены этой идеей, вы можете скопировать инструменты командной строки в каталог Windows\System32. Затем вы можете запустить их из любого каталога, например, ping или ipconfig.

редактировать
После небольшого возни, это возможно. Вам просто нужно использовать точки с запятой для разграничения ваших каталогов. Скажем, у вас была программа в "folder1" и "folder2". Вы бы написали свой путь так:

c:\folder1\;c:\folder2\;c:\folder3\;    etc....

Затем вы можете вызывать программу в любом каталоге прямо из командной строки. AFAIK, нет другого способа сделать это только одной строкой.

Вспомогательная информация:http://en.wikipedia.org/wiki/PATH_(variable)

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