Update: I added a small script below to create a folder structure in a tenant so that you can test the new limit
Yesterday, Microsoft announced another small but great change to SharePoint Online and OneDrive: in previous versions of SharePoint you were limited to a maximum path length of 256 characters. This meant that if you had a very deep folder structure, potentially also with long file or folder names, you would at some point hit that limit and not be able to add any files/folders which would have a total path length of more than 256 characters. In SharePoint Online and OneDrive, this limit has now been increased to 400!
While a lot of people advise to move away from folders and towards a metadata-driven architecture, the reality is that the majority of a company’s information is organised with folders. Lots and lots of folders. Which, on your local hard drive or a shared drive, are often organised in a tree-like structure with multiple levels, and thus also potentially exceeding the path length limit.
But, this may cause problems during migrations to SharePoint Online. I’ve seen it during a couple of projects I did recently which migrated content to SharePoint Online – and while more than 99.9% of the content was able to move without issues, there were still some files that were impacted by this limit. Path length in the source environment may have been still below the limit, but as the content was restructured (e.g. it was moved to another subsite with a longer path), the overall length increased and the content could not get migrated. The only option was to reduce the path length, for example by reorganising the folder structure, or renaming files/folders.
Coming back to SharePoint Online and OneDrive: this new limit should be available to everyone straight away! I wrote a small PowerShell script to create a simple folder hierarchy, and was able to go beyond the 256 characters and hit the 400 limit:
And here’s the error shown when you try to create a folder in the UI:
One thing I noticed, however, is that the explanation given by Microsoft on which parts of the file URL are actually part of the path seems to be not quite correct. In my test setup, I managed to successfully create a path of 430 characters, 431 failed. After a quick check I saw that my protocal and server name came to a total of 30 characters – so, I asked on the official announcement for a clarification. But either way, it should be quite rare to run into the 400 character limit, and it’s great to see that Microsoft is finally addressing an issue that has been around for a long period of time.
Update: Here is the script that I used. It will run into a limit and you’ll get an error similar to the screenshot further above. Also, please note that the script creates a library, but does not delete it.
#replace with your own demo site in your own tenant $url = "https://mytenant.sharepoint.com/sites/demo" #modify the following two variables if required $libName = "MaxPathTest" $folderName = "012345678901234567890123456789" $cred = Get-Credential write-host "Connecting to $($url)" Connect-PnPOnline -Url $url -Credentials $cred write-host "Creating library $($libName)" New-PnPList -Title $libName -Template DocumentLibrary $folder = $libName do { $pathLength = $url.Length + 1 + $folder.Length + 1 + $folderName.Length write-host "Trying path length of $($pathLength)" Add-PnPFolder -Name $folderName -Folder $folder $folder = $folder+"/"+$folderName } while ($pathLength -le 500)
Increased Path Length for Files in SharePoint Online and OneDrive #sharepoint #office365 #onedrive https://t.co/hbXL1uHxNF
https://t.co/3oBuycDVUg
Link to Bill Baer’s actual announcement and more details on the path calculation are detailed here at;
https://blogs.technet.microsoft.com/wbaer/2017/05/09/new-maxpath-limits-in-sharepoint-and-onedrive/
Thanks Rene for passing this along to our community…
Hi, I think it’s the same details as in the techcommunity announcement. Still unsure about the actual definition of what goes into the path. But as mentioned, 400 is quite a lot of characters, should make it a very rare occurrence to run into this limit
Rene… I think you are correct. My protocol and server name came to 34 chars and it let me increase until I hit 434. So I think it is similar to the old 256 # where the protocol and server name don’t count.
Thanks for confirming it, Mike!
Increased Path Length for Files in SharePoint Online and OneDrive https://t.co/iLD364f7Al #Office365
Increased Path Length for Files in SharePoint Online and OneDrive . https://t.co/azCgoHs2r3
Great post man!
Thanks mate!
Increased Path Length for Files in SharePoint Online and OneDrive – Rene Modery https://t.co/4uwayulGbF via @modery
Do we need to send a request to Microsoft to increase the MAXPATH size or this can be done by global admin?
Neither is possible, this is a fixed setting
You can use Long Path Tool.It works for me.
By any chance anyone have a script to list down all the files and folders that exceeded the maxpath limit and export it as a text file?
I’ve seen some powershell scripts however it seems to be directed to on-premise sharepoint instead of Sharepoint Online.
Am trying to save a sharepoint site as a template however keep getting path too long error after fixing file after file as the error only indicated 1 affected file each time the command was ran.
Would like to batch list them so that I can fix them before attempting to run the save as template command again.
Hi Asri,
the following should get you started. It will get all items from a specified library (note, there may be issues with libraries with more than 5,000 items) and check the path length for each item. If the length is greater than 400, it will output the name:
#replace with your own demo site in your own tenant
$url = “https://mysite.sharepoint.com/sites/demo”
#modify the following two variables if required
$libName = “mylibname”
$cred = Get-Credential
write-host “Connecting to $($url)”
Connect-PnPOnline -Url $url -Credentials $cred
$list = Get-PnPList | where {$_.Title -eq $libName}
$items = Get-PnPListItem -List $list
foreach($item in $items) {
Get-PnPProperty -ClientObject $item -Property File,Folder
$fullpath = $url
#folder
if(($item.File.Name -eq $null) -and ($item.Folder.Name -ne $null)) {
$fullpath += $item.Folder.ServerRelativeUrl
}
if($item.File.Name -ne $null) {
$fullpath += $item.File.ServerRelativeUrl
}
if($fullpath.Length -ge 400) {
write-host $fullpath
}
}
How can we delete a folder at once which is having files exceeding the character limit . I do not have time to sit and delete / rename one file at a time .
I don’t have a full script available for this, but with the scripts above and the Remove-PnPFolder cmdlet this can be achieved