Tìm kiếm trang web

Khắc phục lỗi "Bạn phải xóa tất cả các mục trong thư mục này trước khi có thể xóa thư mục" trong SharePoint Online


Sự cố: Khi cố xóa một thư mục chứa các thư mục con và tệp, tôi nhận được thông báo lỗi “Bạn phải xóa tất cả các mục trong thư mục này trước khi có thể xóa thư mục” trong SharePoint Online hoặc OneDrive .

Bạn cũng có thể thấy thông báo “Yêu cầu đã bị hủy do nhận được sự kiện. Nếu cố gắng xóa một thư mục không trống, đôi khi có thể nó đang bị lỗi.

Nguyên nhân cốt lõi:

Thông thường, chúng ta không cần làm trống thư mục trước khi xóa. Tuy nhiên, nếu trang web đang áp dụng chính sách lưu giữ bảo toàn hoặc lưu giữ eDiscovery thì chúng tôi có thể nhận được thông báo lỗi này. Khi trang web bị tạm dừng, tài liệu có thể bị xóa nhưng chúng tôi không thể xóa trực tiếp thư mục chứa các tệp và thư mục con. Đây là cách tính năng Giữ lại hoạt động để tránh mất dữ liệu.

Giải pháp cho lỗi “Bạn phải xóa tất cả các mục trong thư mục này trước khi có thể xóa Thư mục” Lỗi:

Hoặc bạn vô hiệu hóa chính sách Lưu giữ hoặc Lưu giữ khám phá điện tử cho trang web từ trung tâm Tuân thủ và Bảo mật Office 365 với tư cách Quản trị viên Toàn cầu (và chờ một thời gian để có hiệu lực!), hoặc như thông báo lỗi cho biết, hãy xóa tất cả các tệp và thư mục con bên trong thư mục Đầu tiên! Việc xóa các tệp khỏi mỗi thư mục có thể tốn thời gian, vì vậy bạn có thể sử dụng “Xem trong File Explorer” để xóa thư mục chứa các tệp hoặc PowerShell để dễ dàng hơn.

SharePoint Online: Xóa thư mục có tệp bằng PowerShell

Tập lệnh PowerShell này xóa tất cả các tệp và thư mục con của thư mục đã cho trong SharePoint Online bằng lệnh ghép ngắn Remove-PnPListItem.


#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName ="Branding"
$FolderServerRelativeURL = "/sites/Marketing/Branding/2019"
 
Try {
    #Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -Interactive
      
    #Get All Items from Folder in Batch
    $ListItems = Get-PnPListItem -List $ListName -FolderServerRelativeUrl $FolderServerRelativeURL -PageSize 2000 | Sort-Object ID -Descending
  
    #Powershell to delete all files from a folder
    ForEach ($Item in $ListItems)
    {
        Remove-PnPListItem -List $ListName -Identity $Item.Id -Recycle -Force
        Write-host "Removed File:"$Item.FieldValues.FileRef
    }
}
Catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

Xem thêm tại đây: Làm cách nào để làm trống thư mục trong SharePoint Online bằng PowerShell?

Nếu bạn có thư viện lớn hơn, lệnh ghép ngắn Get-PnPListItem với tham số FolderServerRelativeURL có thể không thành công - ngay cả khi bạn đã sử dụng “PageSize”. Vì vậy, đây là tập lệnh PowerShell để xóa mọi thứ khỏi một thư mục nhất định trong SharePoint Online:


#Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/mumbai"
$ListName ="Work"
$FolderServerRelativeURL = "/sites/mumbai/w/Arun Tiwari/New folder/*"

Try {
    #Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -UseWebLogin
    $List = Get-PnPList $ListName
       
    #Get All Items from Folder in Batch
    $global:counter = 0;
    $ListItems = Get-PnPListItem -List $ListName -PageSize 2000 -Fields ID,FileDirRef,FileRef -ScriptBlock `
        { Param($items) $global:counter += $items.Count; Write-Progress -PercentComplete ($global:Counter / ($List.ItemCount) * 100) -Activity `
                "Getting Items from Folder '$FolderServerRelativeURL'" -Status "Getting Items $global:Counter of $($List.ItemCount)";}

    #Get List Items from the folder and Sort List Items based on Server Relative URL - Descending
    $ItemsFromFolder = $ListItems | Where {$_.FieldValues["FileDirRef"] -like $FolderServerRelativeURL } | Select-Object @{Name="ServerRelativeURL";Expression={$_.FieldValues.FileRef}}, ID | Sort-Object -Descending -Property ServerRelativeURL
    Write-host "Total Number of Items Found in the Folder:"$ItemsFromFolder.count
         
    #Delete List Items in Batch
    $Batch = New-PnPBatch
    ForEach ($Item in $ItemsFromFolder)
    {
        Remove-PnPListItem -List $ListName -Identity $Item.ID -Recycle -Batch $Batch
        Write-host "Item Queued for deletion:"$Item.ServerRelativeURL
    }
    Invoke-PnPBatch -Batch $Batch -Details

}
Catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

Lỗi này có thể xảy ra khi bạn đã kiểm xuất tệp! Hãy kiểm tra tất cả để khắc phục: SharePoint Online: PowerShell để kiểm tra hàng loạt tất cả tài liệu

Tóm lại, thông báo lỗi “Bạn phải xóa tất cả các mục trong thư mục này trước khi có thể xóa thư mục” có thể được giải quyết bằng cách xóa hoặc di chuyển các mục trong thư mục. Bằng cách làm theo các bước được nêu trong bài viết này, bạn có thể dễ dàng giải quyết lỗi này và xóa thư mục nếu cần.

Bài viết liên quan