'How to batch delete folder using PowerShell

I'm trying to delete my OneDrive folder that is really large and has many nested folder with many items. I have this script but it's not able to handle a very large folder so just wondering how can I modify it so that It'll delete it by batch

I'm looking for an example elsewhere but couldn't find it yet so I would be really appreciated if anybody can help me modify or give me suggestion.

#Variables
$SiteURL = "OneDrive URL"
$ServerRelativeUrl= "/Zipped_Documents"


 
Try {
    #Get Credentials to connect
    $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Global:adminUPN, $Global:adminPwd)
    $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $ctx.Credentials = $Credentials
   
    #Get the web from URL
    $Web = $Ctx.web
    $Ctx.Load($Web)
    $Ctx.executeQuery()
 
    #Get the Folder object by Server Relative URL
    $Folder = $Web.GetFolderByServerRelativeUrl($ServerRelativeUrl)
    $Ctx.Load($Folder)
    $Ctx.ExecuteQuery()
 
    #Call the function to empty Folder
    Empty-SPOFolder $Folder
 
    #Delete the given Folder itself
    Write-host  -f Green "Deleting Folder:"$Folder.ServerRelativeUrl
    $Folder.Recycle() | Out-Null
    $Ctx.ExecuteQuery()
}
Catch {
    write-host -f Red "Error:" $_.Exception.Message
}


 
#Function to Delete all files and Sub-folders of a given Folder
Function Empty-SPOFolder([Microsoft.SharePoint.Client.Folder]$Folder)
{
    Try {
        #Get All Files from the Folder
        $Ctx = $Folder.Context
        $Files = $Folder.Files
        $Ctx.Load($Files)
        $Ctx.ExecuteQuery()
 
        #Iterate through each File in the Root folder
        Foreach($File in $Files)
        {
            #Delete the file
            Write-Host -f Green "$File.Name"
            $Folder.Files.GetByUrl($File.ServerRelativeUrl).Recycle() | Out-Null
            $Folder.Files.GetByUrl($File.ServerRelativeUrl).DeleteObject() | Out-Null
            Write-host -f Green "Deleted File '$($File.Name)' from '$($File.ServerRelativeURL)'"
        }
        $Ctx.ExecuteQuery()
 
        #Process all Sub Folders of the given folder
        $SubFolders = $Folder.Folders
        $Ctx.Load($SubFolders)
        $Ctx.ExecuteQuery()
         
        #delete all subfolders
        Foreach($Folder in $SubFolders)
        {
            #Exclude "Forms" and Hidden folders
           
                #Call the function recursively to empty the folder
                Empty-SPOFolder -Folder $Folder
 
                #Delete the folder
                Write-Host -f Green "$Folder.UniqueId"
                #$Ctx.Web.GetFolderById($Folder.UniqueId).Recycle() | Out-Null
                $Ctx.Web.GetFolderById($Folder.UniqueId).DeleteObject() | Out-Null
                $Ctx.ExecuteQuery()
                Write-host  -f Green "Deleted Folder:"$Folder.ServerRelativeUrl
           
        }
    }
    Catch {
    write-host -f Red "Error: $Folder.UniqueId - $File.Name " $_.Exception.Message
    }
}



Solution 1:[1]

In cmd prompt try creating an empty folder and then use robocopy:

robocopy emptyFolder \UNC\path\to\SiteFolder /MIR

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Alex Korobchevsky