전체 폴더 트리를 삭제하면 때때로 작동하고 때로는 "디렉토리가 비어 있지 않습니다"오류와 함께 실패합니다. 폴더가 여전히 존재하는지 확인하려고하면 "액세스 거부"또는 "무단 액세스"오류가 발생할 수 있습니다. 이 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
PowerShell에서 계산 된 속성 사용 Microsoft TechNet 기사 는 하위 폴더 목록을 깊이별로 정렬하는 데 도움이되었습니다.
와 마찬가지로 신뢰성 문제 RD / S / Q는 실행에 의해 해결 될 수 DEL / F / S / Q를 종래에 RD / S / Q 앤드 실행 RD를 예하여 (이상적으로는, 일시 정지 사이에서 - 번째 필요 핑 같이 이하).
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