Fastest method for deleting massive directories in Windows #

This method appears to be the winner:

del /f/s/q folder-name > nul && rmdir /s/q folder-name

Tested on a ~10TB directory (containing many hundreds of thousands of files) residing on a SATA-connected 32TB Windows Storage Spaces SSD array. Time to delete: ~10 seconds. On a USB 3.1-connected 32TB RAID 0 HDD array, the process took just over a minute.

Despite a claim to the contrary, I found this robocopy method to be slower:

mkdir "empty" && robocopy "empty" "deletetest" /mir /w:1 /r:10 /mt:32 > nul

(See also Robocopy: Is /MT with more threads faster?)

Speaking of timing commands in Windows, check out this neat batch script by user87453 for approximating *nix's time command:

@echo off
@setlocal

set start=%time%

:: Runs your command
cmd /c %*

set end=%time%
set options="tokens=1-4 delims=:.,"
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100

set /a hours=%end_h%-%start_h%
set /a mins=%end_m%-%start_m%
set /a secs=%end_s%-%start_s%
set /a ms=%end_ms%-%start_ms%
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
if %hours% lss 0 set /a hours = 24%hours%
if 1%ms% lss 100 set ms=0%ms%

:: Mission accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo command took %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)

/windows | Oct 08, 2022


Subscribe or visit the archives.