Рекомендации по управлению переменными среды PATH / среды Windows?

22

Прямо сейчас это такой беспорядок. Каждый раз, когда я устанавливаю новую программу, которая делает что-то тривиальное в командной строке, я должен добавить ее в путь. Фактически, я разрабатываю для Ruby, и даже гемы (плагины / расширения) иногда имеют свои собственные исполняемые файлы и хранятся в разных папках, и мне приходится добавлять несколько путей для каждого приложения. Дошло до того, что я нажимаю тридцать путей в моей переменной окружения PATH.

Я осторожно копирую и вставляю их в домашнюю папку и определяю путь к ней; это просто кажется неправильным. Есть ли признанная лучшая практика, которую мне не хватает?

Джастин Л.
источник
Это такой замечательный вопрос - запуск программ в UNIX настолько прост, но в Windows - такая боль. Жаль, что единственные решения все еще кажутся такой тяжелой работой ...
user10550

Ответы:

13

В моей %UserProfile%\Appsпапке находится несколько небольших автономных утилит , таких как архиваторы и тому подобное. Затем есть ряд командных файлов, которые я написал и часто использую, которые находятся в %UserProfile%\Batches. В остальном я просто добавляю их в PATHпапку, которая выполняется либо установщиком, либо

setx PATH "%PATH%;%CD%"

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

Вы можете (и я иногда это делаю) писать небольшие командные файлы-оболочки для таких программ. Простое копирование / жесткая ссылка / символическая ссылка исполняемого файла в другой каталог, вероятно, не будет работать в Windows, но вы можете легко создать командный файл, например, для программы Foo:

@"%ProgramFiles%\Foosoft Foo\foo.exe" %*

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

детеныш
источник
Как работают эти командные файлы оболочки? Работают ли они точно так, как требуется фактический путь? Если это так, это удивительно.
Джастин Л.
@Justin: они просто делегируют все аргументы, заданные командному файлу, реальной программе. Где это находится, вы должны знать сами.
Джои
Hm; Я должен уточнить - есть ли какая-либо функциональная разница между добавлением каталога двоичного файла в PATH и созданием пакетного файла двоичного файла в пользовательском каталоге, который находится в PATH?
Джастин Л.
@Justin: если вы снова используете пакетные файлы в пакетных файлах, значит, есть. Кроме того, я не знаю ни о чем.
Джои
@Joey Мне нравится идея обертки, которая хороша для запуска программ из cmd, но при запуске из start..run отвлекает всплывающее окно cmd перед запуском программы, у вас есть способ обойти это? кажется, можно также поместить каталоги для всех программ в путь и позволить ему быть длинным. так близко еще так далеко!
Barlop
10

Я не уверен в каких-либо конкретных лучших практиках. Но я предпочитаю использовать GUI PATH Editor для управления переменными PATH. Так что это можно четко поддерживать.

Список PATH Editor -

Rapid Environment Editor

Редмондский редактор PATH

ukanth
источник
Графические редакторы могут сделать вещи намного проще хе
Джастин Л.
Этот редактор Redmond PATH - именно то, что я искал. +1
Натан Ридли
Вопрос был в том, чтобы управлять переменной, а не только добавлять элементы. Так что это самый правильный ответ, и IMO - лучшая практика, поскольку другие решения скрывают большую часть содержимого переменной PATH.
Таурелас
2

Теперь, когда большинство компьютеров с Windows поставляется с PowerShell, я использую в своем профиле пользователя много команд sal / Set-Alias, поэтому, если в приложении есть только одно или два приложения, которые я использую, я создам псевдонимы только для этих двух команд вместо добавления вся папка приложения к пути. Примеры включают SQL Management Studio, Notepad ++, TFS Power Tools (средство командной строки, tfpt.exe). Я также копирую свой профиль пользователя на разных компьютерах, так что это позволяет мне проверить существование этого приложения на текущем компьютере перед созданием псевдонима (иногда предупреждение, если приложение не установлено).

filter ctQuoteString { "`"$_`"" }
filter ctResolvePath { Resolve-Path $_ | select -ExpandProperty Path | ctQuoteString } # used in Edit.ps1

$nppExe = "C:\Program Files (x86)\Notepad++\notepad++.exe"
if ((Test-Path variable:\nppExe) -and (Test-Path $nppExe)) {
    function EditNotepadPP { 
        param ([parameter(ValueFromPipelineByPropertyName=$true)][Alias("FullName","FileName")]$Path) 
        begin { if (! $nppExe) { throw 'variable $nppExe is not defined' } }
        process {
            $Path | ctResolvePath | % { # ctResolvePath will get full path and surround with quotes
                & $nppExe $_
            }
            #AddEditHistory $Path #if you need detailed time tracking, might help to create a log what files you're editting
       } 
    }
    Set-Alias npp EditNotepadPP
}

# I have similar functions for other apps.
Set-Alias vs EditVS
Set-Alias tfe EditTFCheckout
yzorg
источник