#RequireAdmin $sFolder = FileSelectFolder("Select folder", "") If @error Then Exit ProgressOn("Dir delete with progress", "", "Scanning . . .") $iFiles = _GetFileCount($sFolder) _DeleteFilesProgress($sFolder, $iFiles) ProgressOff() Func _GetFileCount($sFolder, $bRecursive = True) Local $iNumFiles = 0, $hFindFile, $sFile, $sFilepath $hFindFile = FileFindFirstFile($sFolder & "\*") While 1 $sFile = FileFindNextFile($hFindFile) If @error Then ExitLoop $sFilepath = $sFolder & "\" & $sFile If $bRecursive And StringInStr(FileGetAttrib($sFilepath), "D", 2) <> 0 Then $iNumFiles += _GetFileCount($sFilepath, $bRecursive) $iNumFiles += 1 WEnd Return $iNumFiles EndFunc Func _DeleteFilesProgress($sFolder, $iTotalFiles, $iNumFiles = 0, $bRecursive = True) Local $hFindFile, $sFile, $sFilepath $hFindFile = FileFindFirstFile($sFolder & "\*") While 1 $sFile = FileFindNextFile($hFindFile) If @error Then ExitLoop $sFilepath = $sFolder & "\" & $sFile If $bRecursive And StringInStr(FileGetAttrib($sFilepath), "D", 2) <> 0 Then $iNumFiles = _DeleteFilesProgress($sFilepath, $iTotalFiles, $iNumFiles, $bRecursive) ProgressSet($iNumFiles / $iTotalFiles * 100, "Deleting: " & $sFile) DirRemove($sFilepath) Else ProgressSet($iNumFiles / $iTotalFiles * 100, "Deleting: " & $sFile) FileDelete($sFilepath) EndIf $iNumFiles += 1 WEnd Return $iNumFiles EndFunc