Por uma razão que eu nunca entendi totalmente, for
usa uma sintaxe diferente dentro e fora dos arquivos em lote.
Este comando deve funcionar dentro de um arquivo de lote
for /f "delims=" %%i in ('dir /s /b /ad ^| sort /r') do rd "%%i"
No prompt de comando (sem arquivo em lotes), você deve substituir %%i
por %i
:
for /f "delims=" %i in ('dir /s /b /ad ^| sort /r') do rd "%i"
Além disso, para suprimir as mensagens de erro The directory is not empty.
, use rd "%i" 2>NUL
.
Um simples rd "%i">NUL
redireciona a saída ( stdout ), não as mensagens de erro ( stderr ).