В жизни каждого админа был, есть и будет есть, файловый сервер. И естественно, на каждом таком сервере возникает что-то вроде "папки для обмена". Как предполагает название - файлы туда должны быть положены, а в последствии удалены, НО, пользователи как правило имеют малый объем памяти, и соответственно забывают удалить за собой плоды своего творчества. А сервера-то до сих пор не научились делать резиновыми! Вот и возникает момент, когда место на диске кончается и начинается "генеральная уборка", процесс мучительный и долгий, и хорошо, если есть ленточная библиотека для резервных копий или иное хранилище, куда можно сбросить все "ненужное", дабы потом удалить навсегда. А если нет, то "публичная порка", в случае самовольной чистки "излишков", гарантирована. Так что же делать? Ответ есть!
Во первых, и это главное по сути, на уровне руководства, т.е. директора, лучше - самого главного, делаем распоряжение о том, что, такая-то папка, на таком-то сервере, будет чистится, допустим каждый день, и файлы старше, допустим, двух недель, от туда будут удалятся.
Сделали, подписали, отксерили и повесили на каждом углу! Замечательно, теперь начнем создавать робота, который будет ловить непослушных пользователей старые файлы и безжалостно их удалять!
Сначала алгоритм:
Нам понадобится два батч файла, один будет отслеживать основной алгоритм (искать старые файлы), а второй будет перемещать их с места на место.
cleaner.cmd :
echo offrem # указываем в какой кодировке будем работать, т.к. имена файлов могут быть на русском языке, используем соответствующую кодировкуchcp 1251clsecho.rem # задаем глобальные переменныеset BASED=Share\Public\----- Папка для обмена -----set TODIR=Share\Public\---- DELset ROOLFILE=F:\%BASED%\! -= ВНИМАНИЕ - ПРАВИЛА =-\ЧИТАТЬ ВСЕМ.txtrem # чистим старые файлыecho *echo * Clearing "F:\%TODIR%"rd /S /Q "F:\%TODIR%"rem # создаем новый каталогMKDIR "F:\%TODIR%"rem # создаем дерево каталогов, чтобы пользователи могли найти свои файлыecho *echo * Creating tree folder copy of "F:\%BASED%" in "F:\%TODIR%"xcopy "F:\%BASED%" "F:\%TODIR%" /T /Erem # переносим файлы старше 15 днейecho *echo * Mooving old filesforfiles /P "F:\%BASED%" /S /D -15 /C "cmd /c if @isdir==FALSE c:\mover.cmd @relpath"rem # записываем правила на местоecho "----- Папка для обмена -----" > "%ROOLFILE%"echo. >> "%ROOLFILE%"echo Данный ресурс предназначен только для обмена информацией между пользователями. >> "%ROOLFILE%"echo. >> "%ROOLFILE%"echo Хранить свои файлы в данной папке запрещено. >> "%ROOLFILE%"echo. >> "%ROOLFILE%"echo Это означает, что файлы, записанные в данную папку, должны быть удалены после копирования. >> "%ROOLFILE%"echo. >> "%ROOLFILE%"echo Файлы, дата изменения которых превышает 2-х недельный срок, будут удаляться, предварительно они будут перемещаться в папку "---- DEL", которая находится на уровень выше. >> "%ROOLFILE%"echo. >> "%ROOLFILE%"echo Очистка папки будет происходить ежедневно, ночью, соответственно "вчерашние файлы" будут доступны в папке "---- DEL". >> "%ROOLFILE%"echo. >> "%ROOLFILE%"rem # в лог вписываем удачный переносecho %date% - %time% - compleated >> cleaner.logrem # если перенос сбился, возникла ошибка или еще чего произошло, по данным лога можно определить хотя бы дату и время, когда система всталаПисать все действия в лог бессмысленно, т.к. тогда лог будет очень большим.
mover.cmd:
echo offrem # берем путь и имя файла для перемещенияset QWSD= %1set QWSD=%QWSD:"=%set QWSD=%QWSD%0set QWSD=%QWSD:~1,-1%rem # в процессе просмотра работы скрипта, при копировании каждого файла в окне будет выводится знак *rem # для особо одаренных или же для отчетности, можно вставить счетчик, для подсчета количества перенесенных файловecho *rem # копируем файл в папку под удалениеcopy "F:\%BASED%%QWSD%" "F:\%TODIR%%QWSD%" /Yrem # удаляем файл в оригинальном местеdel /F /Q "F:\%BASED%%QWSD%"echo.И так, теперь переносим эти два батч файла на сервер и создаем задание в "Планировщике задач" на запуск cleaner.cmd каждую ночь.
Всё! Задача - решена!