Настройка утилит командной строки в Windows

Если вы знаете, что такое командная строка (наверное, вы живете в Total Commander или Far, как и я), то вы также знаете, насколько она бывает полезной и удобной.

Менее удобна настройка таких утилит. Чтобы все было красиво, программа, поддерживающая вызов из командной строки, должна находиться в одном из каталогов, указанном в переменной окружения PATH — это позволит запускать программу просто по имени файла без указания полного пути к нему. Но указывать все каталоги всех утилит командной строки в 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 файл примерно следующего содержания:

Таким образом, eac3to.cmd становится заменой eac3to.exe в командной строке. Данный подход мало того, что лишен всех озвученных выше проблем, он к тому же более портабельный (все, что нужно настроить при переносе на другую машину — это один путь в PATH), и гораздо более расширяемый. Ничто не мешает cmd файлам быть немного посложнее. Например, можно сделать несколько cmd файлов для одной утилиты, которые отличаются набором предопределенных параметров.

Я уверен, что не я первый придумал такой способ настройки утилит командной строки, да вот ничего толком не нашел по этому поводу в интернете. Решил восполнить пробел.

Добавить комментарий