web-dev-qa-db-ja.com

パス変数のフォルダが多すぎます

奇妙な問題が発生しました-PATH変数が長すぎるため、Visual Studioを起動できず、コマンドプロンプトから簡単なコマンドを実行できません。今それを見ると、多くの企業がインストールディレクトリをPATH変数に追加していることがわかります。

なぜこれらの会社がフォルダをパスに追加したのか(おそらく、プログラムの実行をより簡単にするために?)削除できます。それらのいくつかを削除すると、プログラムを起動できなくなりますか? ( ここに 現在パスに存在するもの)

15
CC Inc

環境変数PATHのパスの数を減らすことができます。バックアップとして行全体をメモ帳に保存し、一部を削除してテストします。

それらのほとんどはそこにあるので、ショートカットに「ターゲット」のフルパスが設定されていない場合、「開始」がショートカットに正しく設定されていない場合、または起動が奇妙に行われている場合、プログラムとそのパーツおよびピースは常に見つかりました。ほとんどの状況でフェイルセーフです。パスを削除したプログラムの使用を完全にテストする必要があります。
これは、CMDプロンプトにコマンドを入力する人にとっても非常に便利です。CDがなくても、その名前のプログラムが検出されて実行されるまで、コンピューターは各場所をスキャンします。または同じ名前の他のコマンド:-)

そのパスのセットは、255(または260)未満の文字数に制限されていました(以前は1024に変更されていました)。その後、サーバー'03の時代にパッチを適用して2048を処理し、一部のシステムでは8096を処理できるようになりました。ずっと前に。

今日人々が遭遇する本当の制限は、変数とパスの拡張を含むコマンド文字列の長さに制限があるCMDプロンプトにあります。

http://msdn.Microsoft.com/en-us/library/windows/desktop/ms682653(v = vs.85).aspx ここにマイクロソフトは言う:

「ユーザー定義の環境変数の最大サイズは32,767文字です。環境ブロックのサイズに技術的な制限はありません。ただし、ブロックへのアクセスに使用されるメカニズムによっては、実際的な制限があります。たとえば、バッチファイルコマンドラインの最大長より長い変数は設定できません。」

その場所で^システムパスを含むレジストリの場所をポイントしますHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment残りを読む必要があります。

CMDpromptとバッチの制限は、一度拡張すると2048文字であり、新しいシステムの場合は4倍と言われています(人々には表示されないため、引用が必要です)。

古いシステムのコマンドプロンプトとバッチの長さについて説明している http://support.Microsoft.com/kb/83047 も参照してください。

そこにあるエントリが正しいことを確認するために、Wikiには次のように書かれています。
http://en.wikipedia.org/wiki/Environment_variable

%PATH%この変数には、セミコロンで区切られた(間にスペースを入れないでください)コマンドインタープリターが実行可能ファイルを検索するディレクトリのリストが含まれます指定されたコマンドと一致します。パスを表す環境変数は、PATH変数内にネストできますが、1レベルの間接参照でのみネストできます。このサブパス環境変数自体にパスを表す環境変数が含まれている場合、変数置換でPATHが正しく展開されません。

そこにすべての余分なパスがあると、特定のものがかなり遅くなります。それは、あきらめる前に、それらのすべての場所を調べる必要があるためです。バッチ処理やCMDpromptを使用している場合でも、ファイルアイテムを呼び出すときに常にフルパスを使用すると、常に高速になります。

古いDOSlike 8.3の規則を使用することは、サイズを縮小する1つの方法です。このバッチ https://stackoverflow.com/a/20362922 はうまく機能します。元の文字列をバックアップしてください(もう一度)。その質問で考えられる他の解決策も参照してください。

これが私の見た目です、もっと悪くなっています。
%SystemRoot%\ system32;%SystemRoot%;%SystemRoot%\ System32\Wbem;%SYSTEMROOT%\ System32\WindowsPowerShell\v1.0 \; C:\ Program Files(x86)\ QuickTime\QTSystem \

私はハートビートでクイックタイムを捨てます、そしてAMDsプログラムは以前にそこに拡張パスを入れました、それを捨てました、Adobeeはそれを持っていました、これらは標準のGUIショートカット/アイコンメソッドには関係ありませんでした。多くのものを削除してから、すべての機能をテストできます。 CMDプロンプトを入力して呼び出した場合、それらのパスを削除しても機能しません。

13
Psycogeek

私のパスには、ソフトウェア開発関連の環境変数がいくつかありますが、それらはすべて重要です。

上記の解決策は私にはうまくいかないので、私は directory junctions を選びました:

  • PATHで最も長いパスをいくつか選択します(C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\のように)
  • ジャンクションを保存する小さなフォルダーを作成します:c:\ d \
  • 長いパスの短いジャンクションを作成します。

mklink/j c:\ d\sql "C:\ Program Files(x86)\ Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE \"

15個のパスでこれを行うと、PATHが2045文字から1285文字に減少しました。

ジャンクションがパスに残っており、手動でクリーンアップする必要があるため、最終的にマシンからアイテムをアンインストールするときに問題になる可能性があります。

9
Juliano

パスで許容される最大値ははるかに長くなりますが、このトピック(およびMicrosoftの参照)に関する信頼できる回答がStack Overflowで見つかり、最大のexpandedパス値2048バイトが機能することを示しています。それより長いと問題が発生します。 「拡張された」とは、%区切り文字で示されるすべての変数に値が挿入されて拡張された値になることを意味し、拡張された長さの合計は2048バイトを超えてはなりません。それが原因で発生する問題の種類(Windows 7以降)は次のとおりです。

  • 値の最後のパスを認識しません
  • PATH値を変更するソフトウェアまたはパッチをインストールすると、ランタイム値がNULLになり、スタートメニュー、デスクトップ、タスクバーのすべてのアイコンが画像を失うなど、Windowsを実行するあらゆる種類の問題が発生し、「 ping "または" ipconfig "showコマンドが認識されないエラー
  • PATH値に依存するアプリケーションプログラムが失敗する

個人的には、Windows以外のオペレーティングシステムをお勧めしますが、これに悩まされている場合は、パスエントリの削除、何も壊さないことを確認するためのテスト、2048バイトまでのパス値の取得に何時間も費やす必要があります。

1
Jay Imerman