olasammy
olasammy

Reputation: 7366

Environment variable is too large on Windows 10

I have recently upgraded to Windows 10 from Windows 8.1.

Now I wanted to set an environment variable for my new installation of Apache Maven.

Each time I created the user variable, things were fine. However, I also need to create the system variable where I will need to append the bin directory to the variable that I already create in the user variable to be "path".

Now, each time I do this, I get an error that says "This environment variable is too large". As a result of this, I am unable to create the path.

I have attached an image of this error.

Enter image description here

Upvotes: 250

Views: 161746

Answers (16)

yu yang Jian
yu yang Jian

Reputation: 7165

Try to modify by RegEdit. In my case it works when length is more than 3000.

Press Win + R and enter regedit to open RegEdit. Go to Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, and modify the value of Path to your path. And restart the computer, and it should work.

Update: max length 4096, if exceed, even %abbreviation% useless, supposed length is 4300, just path in first 4096 works, 4097~4300 invalid, as a result move the path important to the beginning may help.

Upvotes: 41

Mister Robato
Mister Robato

Reputation: 176

System environment variables, such as those stored under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, are subject to a character limit, typically around 2048 or 4096 characters, depending on the Windows version and configuration.

On the other hand, user environment variables, stored under HKEY_CURRENT_USER\Environment, do not have the same character limit restrictions. Therefore, when dealing with lengthy paths or environment variable values, setting them at the user level can often bypass the character limit issue encountered with system-level environment variables.

Upvotes: 1

bfris
bfris

Reputation: 5805

Apparently Rapid Environment Editor will do this for you (from Shital Shah's answer), but you can also shorten the paths to their 8.3 filename version. You will get a lot of mileage with just these four replacements:

C:\Program Files       --> C:\PROGRA~1
C:\Program Files (x86) --> C:\PROGRA~2
C:\Users\vd-wps\AppData\Roaming --> %APPDATA%
C:\Users\vd-wps\AppData\Local --> %LOCALAPPDATA%

If you copy your current path into Notepad, first search and replace C:\Program Files (x86) and then C:\Program Files.

Upvotes: 6

Aaron West
Aaron West

Reputation: 195

I found this AutoHotkey script useful, for editing or adding to my extremely long path (3743 chars now):

https://gist.github.com/roblogic/59898966f3ce594eb78a5b6147013194

(I'm not sure what the consequence of such a long path is; I may still have to fix it.)

Upvotes: 0

Christoph Adamakis
Christoph Adamakis

Reputation: 883

Workaround: Use the Edit text button and edit your PATH in a text editor.

Upvotes: -3

alelom
alelom

Reputation: 2983

In addition to the answer of Swapnil, note that you can modify the maximum length of the Path environment variable - which is otherwise limited to 2048 characters (while a single path has an historical limit of 206 characters).

In Windows 10, you achieve this by setting the LongPathsEnabled registry key to 1, which can be found here:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem

To access the registry editor: Windows key + R, type Regedit.

Source: Windows 10 “Enable NTFS long paths policy” option missing

Also take a look at this Super User answer: An answer to Windows 10 “Enable NTFS long paths policy” option missing

Note that the error "Environment variable is too large" is related to the whole variable, not the single path currently being added (to answer the "inaccurate advice" comment below).

Additional note: app compatibility

The text in the registry key/group policy related to LongPathsEnabled reads:

Enabling NTFS long paths will allow manifested win32 applications and Windows Store applications to access paths beyond the normal 260 char limit per node. Enabling this setting will cause the long paths to be accessible within the process.`

The caveat here is the term manifested. In general applications need to declare capabilities explicitly in a manifest file; most win32 applications since the days of Windows Vista are manifested. To use long paths, the app manifest needs a longPathAware element:

<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        <ws2:longPathAware>true</ws2:longPathAware>
    </windowsSettings>
</application>

More info here.

Some users complained that LongPathsEnabled is not yet supported by Windows Explorer and other apps, although in general working alternatives can be found. For example, in this forum post an user states that

The only explorer alternative that does support long paths and long file names is total commander. It also allows to edit file names and open/process the files IF the accepting application also uses the extended API function.
Notepad seems to. MKVtoolnix too. Also, very surprisingly, MPC-HC, even though it hasnt been in development for years. Not surprisingly, sucky VLC does not (seriously?) and neither does the lovely PotPlayer.

There is also an interesting SuperUser discussion on this. In particular, this answer describes two feasible alternatives to use long paths: using Cygwin (a *nix emulation layer) or splitting the long path using NTFS Junction Points (essentially a link, like a symbolic link).

Upvotes: 16

Jith Z
Jith Z

Reputation: 11

So I figured out the same problem I had, I noticed there were many duplicates pointing to the same location. I removed the duplicates which can be done with the delete option when you go click the "edit Environment Varibles" button.

You could instead edit text, copy the text from there, remove duplicates using any popular apps like notepad, excel (use the delimiter as ; then remove duplicates), or use python (use .split(";"), convert into a set, ";".join(stringSet), copy into a notepad file, then replace \ with \ using the ctrl+ H ie find and replace).

Upvotes: 1

one-hand-octopus
one-hand-octopus

Reputation: 2743

I had exactly the same problem. Eventually I had to delete one of the existing variables to make the total length less than 2047.

Then I could add %MAVEN_HOME%\bin to the path variables.

Upvotes: 0

Amir
Amir

Reputation: 2098

In addition to other methods (e.g., PowerShell), I found a nice GUI, "Rapid Environment Editor" that can handle larger text values.

Upvotes: 2

LovellyJubblies
LovellyJubblies

Reputation: 121

I found you can do it via PowerShell.

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

So I grabbed the existing system PATH, pasted into Notepad, added my new thing, and then pasted into the "C:\Program Files" bit of the above. Path was updated. Done.

Upvotes: 9

Shital Shah
Shital Shah

Reputation: 68708

There are a few ways to clean up your path variable. The easiest is to use Rapid Environment Editor. This free utility will,

  1. Remove the duplicate paths (right click → Cleanup Paths)
  2. Remove non-existent folders (shown in red which you need to manually delete)
  3. Replace long paths with short paths (right click → long to short path).

I do the above steps in order and use the third step only for the longest paths until the Path variable size is under control again.

If you want to go more advanced, here's a little C# tool that you can modify to whatever other logic you want to implement.

Upvotes: 109

LeoZ
LeoZ

Reputation: 635

Workaround:

Please restart the system. After restarting the system, PATH is no longer empty, but it may get truncated to 2047 (4095) characters

If the system restart does not help, please:

Launch C:\windows\system32\regedit.exe. Go to the registry hive "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" and clean up unnecessary directories from the “Path” key. Restart the system.

Note: In some exceptional cases if the system is not able to start, please:

  • Login in the safe mode

  • Open the command prompt shell and type:

     reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%SystemRoot^%\system32;^%SystemRoot^% /f
    

For more details:

Limitation to the length of the System PATH variable

Upvotes: 2

Nitro
Nitro

Reputation: 641

Another solution, or more a workaround to bypass the PATH environment variable length limit, is to manage your path (add, remove or update) using a PowerShell script;

  1. Capture the current PATH variable by clicking "Edit Text" (see above screenshot) and copy it to your clipboard and save it in a text file as a backup too to avoid bad surprises. This is not mandatory, but will allow you to recover should something go wrong.

  2. Now that it is backed up, add the following to a new PowerShell (.ps1) file (amending the first line below with the folder path(s) you want to add (the part after the + sign):

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

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

$env:Path = $newPath

This is how I managed to get my (long) PATH variable back after playing with the Windows 10 UI, being caught by the length limitation and losing most of my path.

Upvotes: 48

Bryan
Bryan

Reputation: 121

I changed all the paths to variables for Program Files and programdata (this one saves like one character, though not as important).

For something like Node.js, I changed the normal path of

C:\Program Files\nodejs\

to

%ProgramFiles%\nodejs\

This can be done with "C:\Program Files (x86)" as well using "%ProgramFiles(x86)%".

It saved me a few characters, but enough that it stopped complaining, I feel.

Upvotes: 12

Swapnil Kamat
Swapnil Kamat

Reputation: 2395

When the PATH environment variable gets overloaded with too many values it reaches a point where you cannot add values any more. Trying the following should solve your problem.

Solution 1:

  1. Create a new system environment variable, say 'NEWPATH'
  2. Assign the bin directory location to 'NEWPATH'
  3. Now append '; %NEWPATH%' to the PATH environment variable

If this still doesn't work then try to copy some part of the PATH environment variable already existing values to the 'NEWPATH' and then append the 'NEWPATH'.

Solution 2:

Check the value of the PATH environment variable if you can group and shorten the paths. For example,

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

can be combined to

C:\Program Files\Microsoft SQL Server;

In this way, you can build more space into your fixed length PATH variable and finally adjust your bin directory location into PATH.

Upvotes: 237

Maradox D. Krypt
Maradox D. Krypt

Reputation: 21

You can also try going through your variables to see if there are any irrelevant paths you could delete. This would free up some space for you to add another or more variables.

Upvotes: 1

Related Questions