Windows 10で環境変数が大きすぎる


147

私はこれが奇妙であることを知っており、有用なソリューションを入手せずにオンラインでソリューションを検索するのに約3日間費やしました。だからここに来ることにしました。

最近、Windows 8.1からWindows 10にアップグレードしました。

次に、Apache Mavenの新しいインストール用に環境変数を設定したいと思いました。

ユーザー変数を作成するたびに、問題はありません。ただし、システム変数も作成する必要があります。この場合、ユーザー変数で作成した変数にbinディレクトリを追加して、「パス」にする必要があります。

これを実行するたびに、「この環境変数は大きすぎます。その結果、パスを作成できません。

このエラーの画像を添付しました。

誰かがこの問題を解決するのを手伝ってくれるなら、私はこれを感謝します。

よろしくお願いします。ここに画像の説明を入力してください


14
私は彼らがいつかこれを修正することを望みます。これは決して起こらないはずです。^^
itmuckel 2016年

1
正しい解決策は、アプリケーションがPATH環境変数の誤用をやめることです。適切なソリューションは約20年前から存在しています。しかし、開発者にそれを使用させることは、歯を引くようなものです。
Ian Boyd

回答:


148

PATH変数が多すぎる値で過負荷になると、値を追加できなくなるポイントに到達します。以下を試すことで問題が解決するはずです。

解決策1:

  1. 「NEWPATH」と言う新しいシステム変数を作成します
  2. binディレクトリの場所を「NEWPATH」に割り当てます
  3. 次に 'を追加します。%NEWPATH% 'をPATH変数に

これでも機能しない場合は、PATH変数の一部を既存の値を「NEWPATH」にコピーしてから、「NEWPATH」を追加してください。

解決策2:

パスをグループ化および短縮できる場合は、PATH変数の値を確認してください。例えば、

C:\ Program Files \ Microsoft SQL Server \ 102 \ Tools \ Binn \; C:\ Program Files \ Microsoft SQL Server \ 102 \ DTS \ Bin \;

に組み合わせることができます

C:\ Program Files \ Microsoft SQL Server;

このようにして、固定長のPATH変数により多くのスペースを組み込み、最後にbinディレクトリーの場所をPATHに調整できます。

これがお役に立てば幸いです!


はい、あなたはとても正しいです。多くの調査の結果、パス変数は2048文字しか使用できず、文字がこの段階に達すると、パス変数は多くの文字を使用できなくなることがわかりました。だから私はあなたが提案したことを試しました、そして私は今大丈夫です。ありがとう
olammy

ありがとうございました!ソリューション1の素晴らしいアイデアです。それを自分で考えるべきだった... :)
Dev-iL 2017年

2
これは魅力のように機能します、ありがとう!ただし、setx PATHこれはを直接解決し%NEWPATH%、結果の文字列が再び長すぎるため、使用する場合は注意が必要です。したがって、このアプローチを使用する場合は、コマンドラインではなくダイアログのみを使用する必要があります
IceFire

1
@SwapnilKamatこれは完全に機能しません。私はmiktexを使用しpdflatexています。中PATHにある必要があります。in の場所を指定pdflatexするとNEWPATHpdflatexもう見つかりません( "コマンドpdflatexが認識されません" ...)
Olorin

7
皮肉なことに、Microsoft SQL Serverは非常に多くのパス変数を設定しているため、それだけでほとんどスペースを埋めてしまいます。PATHS_MSSQL変数を作成し、%PATHS_MSSQL%をPATH変数に追加して、それらを置き換えます。PATH変数の多くのスペースを解放しました。
スティーブロイド

49

パス変数をクリーンアップする方法はいくつかあります。最も簡単な方法は、Rapid Environment Editorを使用することです。この無料のユーティリティは、

  1. 重複するパスを削除します(右クリック>パスのクリーンアップ)
  2. 存在しないフォルダを削除します(赤で表示され、手動で削除する必要があります)
  3. 長いパスを短いパスに置き換えます(右クリック>長いパスから短いパス)。

上記の手順を順番に実行し、パス変数のサイズが再び制御されるまで、最長のパスに対してのみ3番目の手順を使用します。

より高度なものにしたい場合は、実装する他のロジックに変更できる小さなC#ツール次に示します。


この投稿を読む前に、どちらのツールについても聞いたことがありませんでした。共有してくれてありがとう!
James Shaw

2
このツールは素晴らしいです!MSは、Windowsに付属する公式エディターにする必要があります!
burzum

35

環境PATH変数の長さ制限を回避する別の解決策またはそれ以上の回避策は、PowerShellスクリプトを使用してパスを管理(追加、削除、または更新)することです。

  1. [テキストの編集]をクリックして現在のPATH変数をキャプチャし(上記のスクリーンショットを参照)、クリップボードにコピーし、テキストファイルにバックアップとして保存して、不測の事態を回避します。これは必須ではありませんが、何か問題が発生した場合に回復できます。

  2. バックアップされたので、新しいPowerShell(.ps1)ファイルに以下を追加します(以下の最初の行を、追加するフォルダーパス(+記号の後の部分)で修正します)。

    $ newPath = $ env:Path + '; C:\ Users .... \ FirstFolderToAddToPath; C:\ Users .... \ SecondFolderToAddToPath; '

    [環境] :: SetEnvironmentVariable( "Path"、$ newPath、 "Machine")

    $ env:Path = $ newPath

これは、Windows 10のUIで遊んだ後(長さ)のPATH変数を取得して、長さの制限に引っかかり、パスのほとんどを失った方法です。お役に立てば幸いです。


ありがとう..これは簡単でした。行2と3に値を割り当てることの違いは何ですか
Nayak

3行目は現在のセッションでそれを設定し、2行目はそれをマシンのデフォルトとして設定します。
鉄人の鬼

2
PSは長いパスが、従来の作品setx /m1048文字に切り捨て:(あなたはテキストエディタで編集パスすることもできますし、ただやる。[Environment]::SetEnvironmentVariable("Path", '\my\new;path1', "Machine")あなたが管理シェルが必要になります。。
Shitalシャー

PSを使用することは可能ですが、GUIを使用することはできません。うーん、どういう意味ですか。賛成、ありがとう!
レジェンド

11

Swapnilの回答に加えて、Path変数の最大長を変更できることに注意してください。それ以外の場合は、2048文字に制限されます(1つのパスの歴史的な制限は206文字です)。Windows 10では、次の場所にあるLongPathsEnabledレジストリキーを1に設定してこれを実現します。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem

レジストリエディタにアクセスするにはWindows Key+R、と入力しRegeditます。

出典:https : //superuser.com/a/1119980

このスーパーユーザーの回答もご覧くださいhttps : //superuser.com/a/1119980/327009

以下のコメントの対処:エラー「環境変数が大きすぎます」は、現在追加されている単一のパスではなく、変数全体に関連しています。


19
これは正確なアドバイスですか?PATH変数の最大長(つまり、複数のパスの連結)は2048文字です。あなたが言及した260文字は、1つのパスの最大長です。それらは関連していますが、同じではありません。
ヘンディイラワン2017

7

遅い答えですが、私は似たようなものを探していて、ここで終わりました。プログラムファイルとprogramdataの変数へのすべてのパスを変更しました(これは重要ではありませんが、1文字のように保存されます)。

nodejsのようなもののために、私は通常のパスを変更しました

C:\ Program Files \ nodejs \

%ProgramFiles%\ nodejs \

これは、「C:\ Program Files(x86)\」および「%ProgramFiles(x86)%\」を使用して実行できます。

それは私にいくつかのキャラクターを救いましたが、私が感じる不平をやめるのに十分でした。


7
%x86%を使用して「C:\ Program Files(x86)」を置換し、%x64%を使用して「C:\ Program Files」を置換しないのはなぜですか?
Xorcist 2017

1
@Xorcist-いいですね!それらについて何も知らなかった
mark1234

デフォルトでは存在しないと思いますが、自分で作成できます。
ガブリエルフェア

私もそのようにしました。「c:\ Program FIles」用に%PF%を作成し、それを約20回使用してパスを十分に短くすることができました。
LaBracca

@Xorcist別の変数を作成することでどのように行われますか?
Demodave

5

PowerShellを使用して実行できることがわかりました。

[System.Environment]::SetEnvironmentVariable("PATH", "C:\Program Files (x86......etc.....", "Machine")

そこで、既存のシステムPATHを取得し、メモ帳に貼り付け、新しいものを追加してから、上記の「C:\ Program Files」ビットに貼り付けました。パスが更新されました。できました。


4

で変更してみてください。regedit私の場合、長さが3000を超えるときに機能します。

を押しWin + Rて入力regeditし、regeditを開きます。に移動しComputer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\EnvironmentPathパスの値を変更します。そして、コンピューターを再起動してください。


1
これは私にとってはうまくいきました。他の方法より簡単だと思います。
shalitha senanayaka

1

回避策:

システムを再起動してください。システムの再起動後、PATHは空ではなくなりますが、2047(4095)文字に切り捨てられる場合があります。システムの再起動が役に立たない場合:

c:\ windows \ system32 \ regedit.exeを起動します。レジストリハイブ「HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment」に移動します。「パス」キーから不要なディレクトリをクリーンアップしますシステムを再起動します

注:一部の例外的なケースでは、システムを起動できない場合は、次のことを行ってください。

セーフモードでログインコマンドプロンプトシェルを開き、次のように入力します。reg add "HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment" / v Path / t REG_EXPAND_SZ / d ^%SystemRoot ^%\ system32; ^%SystemRoot ^% / f

詳細:https : //software.intel.com/en-us/articles/limitation-to-the-length-of-the-system-path-variable


少なくとも制限を増やす方法は4095
Dan M.


0

どうやらRapid Environment Editorが(@shatil_shahの回答から)これを代行してくれますが、「8dot3」バージョンへのパスを短くすることもできます。次の2つの置換だけで多くの走行距離が得られます。

C:\Program Files       --> C:\PROGRA~1
C:\Program Files (x86) --> C:\PROGRA~2

現在のパスをメモ帳にコピーする場合は、最初に検索と置換を行ってC:\Program Files (x86)から、を実行しC:\Progam Filesます。


-3

回避策。テキストの編集を使用し、テキストエディターでPATHを編集します


2
私はあなたの忠告に従いたいと思っています。コンピュータに保存されている環境変数は何ですか?
ガブリエルフェア

それは単なるテキストです。メモ帳を使用して開く
Christoph Adamakis 2017年

@GabrielFair Edit Textファイルを開く代わりに、というボタンをクリックする必要がありました。
AlexMelw
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.