web-dev-qa-db-ja.com

Windows PATH /環境変数を管理するためのベストプラクティス?

今、それはそのような混乱です。コマンドラインで些細なことをする新しいプログラムをインストールするたびに、それをパスに追加する必要があります。実際、私はRubyで開発しており、gem(プラグイン/拡張機能)でさえ独自の実行可能ファイルを持っていて、異なるフォルダーに保存されているため、アプリケーションごとに複数のパスを追加する必要があります。 PATH環境変数で30個のパスをプッシュするようになりました。

私はそれらをある種のホームフォルダにコピーして貼り付け、それにパスを設定することに注意しています。気分が悪いだけです。私が見逃している確立されたベストプラクティスはありますか?

22
Justin L.

アーカイバなど、いくつかの小さな自己完結型のユーティリティが私の%UserProfile%\Appsフォルダにあります。次に、%UserProfile%\Batchesにある、私が作成して頻繁に使用するバッチファイルがいくつかあります。残りの部分については、それらをPATHに追加するだけです。これは、インストーラーによって、または

setx PATH "%PATH%;%CD%"

適切なディレクトリから。そこにあるパスの数は、コンテンツが長くなりすぎた場合にのみ問題になるはずです(環境変数には長さの制限があります)。

あなたはそのようなプログラムのために小さなラッパーバッチファイルを書くことができます(そして私は時々そうします)。実行可能ファイルを別のディレクトリにコピー/ハードリンク/シンボリックリンクするだけでは、Windowsでは機能しない可能性がありますが、たとえばプログラムFooのバッチファイルを簡単に作成できます。

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

次に、それらのバッチファイルを保存するフォルダーをPATHに追加できます。

13
Joey

具体的なベストプラクティスについてはよくわかりません。しかし、私はPATH変数を管理するためにGUI PATHEditorツールを使用することを好みます。明確に維持できるように。

PATHエディターのリスト-

Rapid Environment Editor

Redmond PATH Editor

10
ukanth

ほとんどのWindowsマシンにPowerShellが付属しているので、ユーザープロファイルで多くのsal/Set-Aliasコマンドを使用します。したがって、使用するアプリが1つまたは2つしかない場合は、追加するのではなく、これら2つのコマンドのエイリアスを作成します。パスへのアプリフォルダー全体。例としては、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
2
yzorg