บางครั้งการลบทรีของโฟลเดอร์ทั้งหมดจะใช้งานได้และบางครั้งก็ล้มเหลวด้วยข้อผิดพลาด "Directory not empty" จากนั้นความพยายามที่จะตรวจสอบว่าโฟลเดอร์ยังคงอยู่อาจส่งผลให้เกิดข้อผิดพลาด "การเข้าถึงถูกปฏิเสธ" หรือ "การเข้าถึงที่ไม่ได้รับอนุญาต" ผมไม่ทราบว่าทำไมถึงเกิดขึ้นแม้ว่าความเข้าใจบางคนอาจจะได้รับจากนี้การโพสต์ StackOverflow
ฉันสามารถแก้ไขปัญหาเหล่านี้ได้โดยระบุลำดับที่รายการภายในโฟลเดอร์ถูกลบและเพิ่มความล่าช้า ต่อไปนี้ทำงานได้ดีสำหรับฉัน:
# First remove any files in the folder tree
Get-ChildItem -LiteralPath $FolderToDelete -Recurse -Force | Where-Object { -not ($_.psiscontainer) } | Remove-Item –Force
# Then remove any sub-folders (deepest ones first). The -Recurse switch may be needed despite the deepest items being deleted first.
ForEach ($Subfolder in Get-ChildItem -LiteralPath $FolderToDelete -Recurse -Force | Select-Object FullName, @{Name="Depth";Expression={($_.FullName -split "\\").Count}} | Sort-Object -Property @{Expression="Depth";Descending=$true}) { Remove-Item -LiteralPath $Subfolder.FullName -Recurse -Force }
# Then remove the folder itself. The -Recurse switch is sometimes needed despite the previous statements.
Remove-Item -LiteralPath $FolderToDelete -Recurse -Force
# Finally, give Windows some time to finish deleting the folder (try not to hurl)
Start-Sleep -Seconds 4
บทความ Microsoft TechNet การใช้คุณสมบัติที่คำนวณได้ใน PowerShell มีประโยชน์กับฉันในการรับรายการโฟลเดอร์ย่อยเรียงตามความลึก
ปัญหาความน่าเชื่อถือที่คล้ายกันกับRD / S / Qสามารถแก้ไขได้โดยการรันDEL / F / S / Qก่อนRD / S / Qและใช้RDเป็นครั้งที่สองหากจำเป็น - โดยมีการหยุดในระหว่าง (เช่นการใช้pingตามที่แสดง ด้านล่าง)
DEL /F /S /Q "C:\Some\Folder\to\Delete\*.*" > nul
RD /S /Q "C:\Some\Folder\to\Delete" > nul
if exist "C:\Some\Folder\to\Delete" ping -4 -n 4 127.0.0.1 > nul
if exist "C:\Some\Folder\to\Delete" RD /S /Q "C:\Some\Folder\to\Delete" > nul
RD /S /Q