Вам нужно решить две проблемы.
Для начала вам необходимо рассчитать размер папки. Используйте код, подобный этому
:foldersize
set sz=0
for %%F in (%1\*.*) do (
set /a kb = %%~zF / 1024
set /a sz = !sz! + !kb!
echo %%F %%~zF !kb! !sz!
)
goto :eof
Во-вторых, вам нужно распознать старые файлы и удалять их, пока не будет достигнут размер
for /F "tokens=*" %%F in ('dir /A-D /OD /B %1\*.*') do (
if !sz! geq !targetsize! (
call :filesize %1\%%F
del %1\%%F
set /a sz = !sz! - !kb!
) else (
goto :eof
)
)
goto :eof
:filesize
set /a kb = %~z1 / 1024
goto :eof
Соединение всех частей ...
@echo off
setlocal enabledelayedexpansion
set /a targetsize=%2
call :foldersize %1
for /F "tokens=*" %%F in ('dir /A-D /OD /B %1\*.*') do (
if !sz! geq !targetsize! (
call :filesize %1\%%F
del %1\%%F
set /a sz = !sz! - !kb!
) else (
echo Done... %1 size is now !sz! KB
goto :eof
)
)
echo Not completely done... %1 size is still !sz! KB
goto :eof
:filesize
set /a kb = %~z1 / 1024
goto :eof
:foldersize
set sz=0
for %%F in (%1\*.*) do (
set /a kb = %%~zF / 1024
set /a sz = !sz! + !kb!
)
goto :eof
Тестируйте и тестируйте и тестируйте, так как он не перемещает файлы в корзину, но удаляет файлы навсегда.
Также вы можете указать опцию /F
, если у вас есть файлы только для чтения, которые вы хотите удалить.
Если у вас есть подпапки в папке, и вы хотите учесть их размер папки и удалить старые файлы, все может стать более сложным.
Расчет размера такой
:foldersizerecurse
set sz=0
for /F %%F in ('dir /OD /B *.*') do (
set /a kb = %%~zF / 1024
set /a sz = !sz! + !kb!
echo %%F %%~zF !kb! !sz!
)
goto :eof
И удаление старых файлов .. вам нужно направить вывод команды 'dir / S' для сортировки и сортировки по дате. Я устала это делать.