Войти

Показать полную графическую версию : Удалить файлы по размеру и дате создания (не изменения)


Vlad87
05-09-2014, 18:14
Желательно сделать как cmd/bat скрипт, но сгодится и vbs.
Есть непрерывно записывающая веб-камера и желание автоматически удалять старые записи, на которых судя по всему ничего не происходило. Размеры файлов для удаления либо более 40000000 байт (камеру глючит ночью и она пишет с максимальным битрейтом), либо менее 15000000 байт, расширения файлов avi. Скрипт будет добавлен в планировщик задач.
Должно корректно работать при смене месяца. К сожалению, камера не проставляет дату изменения файла (везде ставит 1970 год), только дату создания, так что FORFILES /D -7 отпадает с ошибкой ОШИБКА: параметр задан неверно.
Как вариант дату можно получать из названия папки или самих файлов. Например, последняя запись должна лежать в папке 20140905 и называться вроде 20140905_180501.avi

Georgio
06-09-2014, 11:22
Vlad87, этот пакетный файл создаст Вам другой пакетный файл, просмотрев содержимое которого, Вы сделаете вывод: запускать его или нет.



@echo off


set "folder=D:\Webcam"
set days=7
set min=15000000
set max=40000000


(
echo @echo off
echo.
echo.


echo :: Удаляем все папки, которые старше %days% дней, вместе с файлами:
(
forfiles /p "%folder%" /d -%days% /c "cmd /c if /i @isdir==true echo rd /q/s @path" 2>nul
)|| echo rem Не найдены.
echo.
echo.

echo :: Удаляем файлы, размер которых меньше %min% байтов:
echo.
(
for /f "tokens=*" %%i in ('
robocopy "%folder%" %random% /nc /ns /ndl /njh /njs /l /e /max:%min%
') do (
echo del "%%i"
)
)|| echo rem Не найдены.
echo.
echo.

echo :: Удаляем файлы, размер которых больше %max% байтов:
echo.
(
for /f "tokens=*" %%i in ('
robocopy "%folder%" %random% /nc /ns /ndl /njh /njs /l /e /lev:2 /min:%max%
') do (
echo del "%%i"
)
)|| echo rem Не найдены.
echo.
echo.

echo :: Удаляем пустые папки:
echo.
(
for /d %%i in ("%folder%\*") do (
(
for /f %%j in ('dir /a/b "%%i"') do pause<nul>nul
)|| echo rd /q/s "%%i"
)
)|| echo rem Не найдены.
echo.
echo.


echo exit
)>"Delete.cmd"


exit /b



.

Vlad87
06-09-2014, 15:23
Vlad87, этот пакетный файл создаст Вам другой пакетный файл, просмотрев содержимое которого, Вы сделаете вывод: запускать его или нет. »
Благодарю, попробую его запустить в понедельник. Но подозреваю, что это не совсем то: удалять папки целиком я не планировал. В любом случае напишу результат. Если не получится - буду отталкиваться от VBS конструкции dateadd("d",-7,now)
[hr]
Да, это действительно не совсем то: в сгенерированном файле прописались команды на удаление старых папок целиком и свежесозданных файлов подходящего размера с любым расширением.




© OSzone.net 2001-2012