@echo off
rem only files bigger than %threshold% MB are listed
set threshold=100
for /r %%F in (*) do call :foo %%~zF "%%F"
goto :eof
:foo
set size=%1
set size_mb=%size:~0,-6%
if not defined size_mb set size_mb=0
if %size_mb% GTR %threshold% echo.%~2
goto :eof
A sub-rotina é infelizmente necessária, pois a expansão atrasada não queria a maneira como eu extraí os megabytes (sim, de fato, megabytes, não mebibytes - eu também não gosto disso, mas é o mais fácil aqui).
Observe que essa abordagem falhará em arquivos maiores que aproximadamente dois exabytes, pois cmd
não pode fazer uma comparação numérica com valores que não se ajustam a um inteiro de 32 bits assinado.
O código também pode ser encontrado no meu repositório SVN .