Lo de las carpetas 0 bytes, en batch me dio malos resultados, el comando DIR me mentía

, así que te recomiendo este vbs que me dijo
Novlucker, lo ejecutas desde el batch y listo...
"
Comprobar_Carpetas_vacias.vbs"
Dim objFileSystem, objTheFolder
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objTheFolder = objFileSystem.GetFolder(wscript.arguments(0))
If objTheFolder.size > 1 then
wscript.quit(0)
else
wscript.quit(1)
end if
para usarlo en un batch, puedes hacerlo por ejemplo así:
@echo off
:Carpetas vacias
For /F "Tokens=*" %%a in ('dir /B /S /A:D "RUTA_DE_LA_CARPETA"') do (
set folder=%%a
call :Comprobar carpeta)
:Comprobar carpeta
"Comprobar_Carpetas_vacias.vbs" "!folder!"
If %errorlevel% EQU 0 (
goto:eof
) ELSE (
rd /q "!carpeta!\"
goto:eof
)
Para los archivos menores de X bytes. Puedes usar esto:
~z - display the file sizeAunque como ya he dicho, no recomiendo usarlo sobre carpetas, engaña mucho. En cambio si lo usas sobre archivos nunca me ha dado problemas, y he hecho muchisimas pruebas

en fin aqui un script que posteé hace tiempo:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir /B /s /A-D "%systemdrive%\*.exe"') do (
set archivo=%%a
set size=%%~za
call :log
)
:log
If !size! EQU 0 (
echo !archivo! >> log.txt
echo !size! >> log.txt
echo+ >> log.txt
del /Q /F "!archivo!"
goto:eof
) ELSE (
goto:eof)
Modificalo a tu gusto

También puedes usar el script de
Novlucker, el vbs, solo hay que modificar una cosa:
Set objTheFolder = objFileSystem.
GetFolder
Set objTheFolder = objFileSystem.
getfilePD:
objTheFolder no importa, es el nombre de la variable.
saludos.