diff --git a/.bin/Scripts/functions/cleanup.py b/.bin/Scripts/functions/cleanup.py index 84227b30..cb400510 100644 --- a/.bin/Scripts/functions/cleanup.py +++ b/.bin/Scripts/functions/cleanup.py @@ -38,10 +38,7 @@ def cleanup_adwcleaner(): shutil.move(source_quarantine, dest_name) # Delete source folder if empty - try: - os.rmdir(source_path) - except OSError: - pass + delete_empty_folders(source_path) # Main folder if os.path.exists(source_path): @@ -139,11 +136,7 @@ def cleanup_d7ii(): shutil.move(entry.path, dest_path) # Remove folder - try: - os.rmdir(entry.path) - except OSError: - # Folder should be empty but whatever - pass + delete_empty_folders(entry.path) # Registry Items for key, settings in D7_HKCR_CLEANUP.items(): @@ -176,10 +169,7 @@ def cleanup_desktop(): shutil.move(entry.path, dest_name) # Remove dir if empty - try: - os.rmdir(dest_folder) - except OSError: - pass + delete_empty_folders(dest_folder) def cleanup_emsisoft(): """Remove EmsisoftCmd files from drive root.""" @@ -218,9 +208,23 @@ def cleanup_regbackups(): shutil.move(entry.path, dest_path) # Delete source folders if empty + delete_empty_folders(r'{}\Support'.format( + global_vars['Env']['SYSTEMDRIVE'])) + +def delete_empty_folders(folder_path): + """Delete all empty folders in path (depth first).""" + if not os.path.exists(folder_path) or not os.path.isdir(folder_path): + # Bail early (silently) + return + + # Delete empty subfolders first + for item in os.scandir(folder_path): + if item.is_dir(): + delete_empty_folders(item.path) + + # Remove top folder try: - os.rmdir(source_path) - os.rmdir(r'{}\Support'.format(global_vars['Env']['SYSTEMDRIVE'])) + os.rmdir(folder_path) except OSError: pass