web-dev-qa-db-ja.com

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

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

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

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

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

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

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

この問題を解決するために誰かが私を助けることができるならば、私はこれを感謝します。

ご協力ありがとうございます。 enter image description here

96
olammy

PATH変数が非常に多くの値でオーバーロードされると、値を追加できなくなるポイントに到達します。以下を試して問題を解決してください。

解決策1:

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

それでも機能しない場合は、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に調整できます。

これがあなたを助けることを願っています!

102
Swapnil Kamat

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

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

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

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

27
Shital Shah

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

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

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

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

[Environment]::SetEnvironmentVariable("Path", $newPath, "Machine")

$env:Path = $newPath

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

24
Sifou13

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem

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

ソース: https://superuser.com/a/111998

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

8
alexlomba87

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

Nodejsのようなものについては、通常のパスを変更しました

C:\ Program Files\nodejs \

%ProgramFiles%\ nodejs \

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

それは私に数人のキャラクターを救ったが、私が感じると文句を言うのをやめるのに十分だった。

5
Bryan

回避策:

システムを再起動してください。システムの再起動後、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

1
LeoZ

PowerShellでできることがわかりました。

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

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

0
B E

他の方法(Powershellなど)に加えて、より大きなテキスト値を処理できるNice GUI、「Rapid Environment Editor」が見つかりました。

https://www.rapidee.com/en/download

0
Amir

他の回答に追加して、ウィンドウにグループポリシーエディターがある場合は、WINKEY + Rを押して、左側のツリー側にポップアップ表示されるウィンドウでgpedit.mscを記述します。

[コンピューターの構成]-> [管理用テンプレート]-> [システム]-> [ファイルシステム]をダブルクリックし、[Win32の長いパスを有効にする]をダブルクリックして[有効]に設定します。変更を有効にするには、再起動が必要になる場合があります。

私が取り組んでいる特定のプロジェクトの環境変数を管理するためのツールを構築する人として、Windows環境変数は、既に別の変数を参照している変数への変数の参照に関してかなりバグがあると言うことができます。これらの種類の変数を適切に読み取るには、これらの変数を(管理者として)evaultパーミッションで読み取るアプリケーションを起動する必要があります。そうでない場合は、変数を%SOME_VARIABLE%/ Folder1/Folder2として読み取ります。開発環境のユーザーおよびシステム環境変数に多くの変数が設定されているため、その機能と絶対パスの使用をやめたのはそのためです。このような状況を回避するために、経験上、参照された変数を既に含む変数を参照しないことをお勧めします。

0
Gilad Reich