Если вы знаете, что такое командная строка (наверное, вы живете в Total Commander или Far, как и я), то вы также знаете, насколько она бывает полезной и удобной.
Менее удобна настройка таких утилит. Чтобы все было красиво, программа, поддерживающая вызов из командной строки, должна находиться в одном из каталогов, указанном в переменной окружения PATH
— это позволит запускать программу просто по имени файла без указания полного пути к нему. Но указывать все каталоги всех утилит командной строки в PATH
есть идея не очень хорошая, и вот почему:
- Поскольку API переменных окружения в Windows не менялось со времен Windows 3, переменные окружения подвержены по нынешним меркам смешным ограничениям на размер. Все переменные окружения скопом не могут превышать лимит в 32k (меньше 33 тысяч) символов, и во многих случаях можно упереться в лимит 2047 символов на одно значение (вот еще инфа). Если путей много и они длинные, то можно банально не влезть и поиметь проблемы. DOS, я помню тебя!
- Пути в
PATH
просматриваются при поиске dll во время загрузки процесса. И хотя dll рядом с исполняемым файлом запускаемого процесса имеют наивысший приоритет, конфликты версий dll все равно возможны в некоторых сценариях — и поверьте, эти глюки не нужны никому. Так что если наша утилита командной строки в своем каталоге содержит dll и exe файлы помимо собственно себя, то включение этого каталога вPATH
может аукнуться. Может быть, дни и или месяцы спустя. - Ну и, наконец, изменять переменные окружения в Windows есть занятие не очень приятное. Computer >> Properties >> Advanced system settings >> Environment Variables открывает вполне гнусное диалоговое окошко, никак не изменившееся за почти два десятка лет. В этом окошке значение переменной
PATH
представлено в виде одной длиннющей строки, содержащей все пути (разделитель — точка с запятой), втиснутую в одну узенькую строку ввода. Юзабилити прет изо всех щелей.
Так что я, как Ленин, иду немного другим путем. Я завел специальный каталог (у меня это C:\CmdTools\Path
), которой прописал в PATH
— и все, больше я PATH
не трогаю. В этом каталоге для каждой утилиты я создаю cmd файл примерно следующего содержания:
1 2 3 4 5 6 7 |
@echo off REM eac3to установлен в C:\Program Files (x86)\eac3to REM %* здесь копирует переданную cmd файлу командную строку "C:\Program Files (x86)\eac3to\eac3to.exe" %* |
Таким образом, eac3to.cmd
становится заменой eac3to.exe
в командной строке. Данный подход мало того, что лишен всех озвученных выше проблем, он к тому же более портабельный (все, что нужно настроить при переносе на другую машину — это один путь в PATH
), и гораздо более расширяемый. Ничто не мешает cmd файлам быть немного посложнее. Например, можно сделать несколько cmd файлов для одной утилиты, которые отличаются набором предопределенных параметров.
Я уверен, что не я первый придумал такой способ настройки утилит командной строки, да вот ничего толком не нашел по этому поводу в интернете. Решил восполнить пробел.