Как создать пакетный скрипт, который будет удалять самые старые файлы при достижении предельного размера папки - PullRequest
1 голос
/ 28 июля 2011

Я нашел множество решений для подобных проблем, но мне интересно, возможно ли создать сценарий, который удаляет самые старые файлы после достижения предельного размера папки?

1 Ответ

5 голосов
/ 28 июля 2011

Вам нужно решить две проблемы.

Для начала вам необходимо рассчитать размер папки. Используйте код, подобный этому

: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' для сортировки и сортировки по дате. Я устала это делать.

...