web-dev-qa-db-ja.com

PATH変数の長さの制限を回避する方法

error message

システムのプロパティ

この環境変数は大きすぎます。このダイアログでは、最大2047文字の値を設定できます。

多くのソフトウェアを使用/使用しており、その結果、PATHが増加しました。新しいパスを追加しようとすると、上記のメッセージが表示されます。回避策として、ユーザーパスを編集していますが、編集しないことをお勧めします。

10
Tobi Alafin

Microsoftのドキュメントには、Windowsの環境変数は32,767文字( link )に制限されていると記載されていますが、そのような長い変数の作成方法については記載されていません。

ここでの問題は、Windowsが提供するツールすべてに制限があることです。

  • Setおよびsetxコマンドは、値を1023文字に切り捨てます。

  • レジストリで_HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment_に直接設定すると、regeditは入力された文字列を2047文字より後に切り捨てるため、失敗します。

したがって、回避策を使用する必要があります。

短いフォルダ名を使用してください

_dir /x /ad_を使用すると、このような名前が表示される場合があります。次の例は、私のコンピュータで、フォルダProgram Files (x86)が_PROGRA~2_に置き換えられることを示しています。

enter image description here

埋め込まれた環境変数を使用します

あなたが持っている場合:

_C:\this_is_a\long_path\that_appears\in_multiple_places\subdir1
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir2
_

次に、次のような新しい環境変数を作成できます。

_SET P1=C:\this_is_a\long_path\that_appears\in_multiple_places
_

その後、元のパスは

_%P1%\subdir1
%P1%\subdir2
_

余分なパスを含む新しい変数、たとえばNEWPATHを作成してPATHを2つに分割し、PATH変数に_;%NEWPATH%_を追加することもできます。

setxコマンド の使用は避けてください。埋め込まれた環境変数を直接解決し、結果の文字列が再び長すぎるためです。

PowerShellスクリプトを使用してPATHを設定します

PowerShellはWindows APIを直接呼び出すため、環境変数の理論上の制限である32,767文字に近づくことができます。

スクリプトには、次のようなコマンドを含めることができます。

_[Environment]::SetEnvironmentVariable("Path", $longpath, "Machine")
_
10
harrymc