Ситуация: прикладная программа при выходе сохраняет в заданном каталоге файл бэкапа. Со временем файлы накапливаются и место на диске заканчивается.
Задача: Ограничить количество хранимых файлов, скажем, пятью. Сделать всё желательно средствами Windows.
Итак, в каталоге C:\TrustClient\backup\ хранятся файлы бэкапа *.gbk. Нужно сделать так, чтобы хранились последние пять. Если новые архивы не создавались, то эти пять всё равно должны храниться.
Для работы создадим каталоги:
В каталоге C:\programs\cmd два командных файла: tcbackup.cmd и tcbackup1.cmd.
Файл tcbackup.cmd:
@ECHO OFF
MOVE C:\TrustClient\backup\*.gbk C:\temp\TrustClient\1\
REM DIR C:\temp\TrustClient\1 /b /tc > C:\programs\cmd\tcbackup.txt
DIR C:\temp\TrustClient\1 /a-d /b /o-d > C:\programs\cmd\tcbackup.txt
CALL C:\programs\cmd\tcbackup1.cmd 5 C:\programs\cmd\tcbackup.txt
:END
Что он делает:
Файл tcbackup1.cmd:
@echo off
REM http://forum.script-coding.com/viewtopic.php?id=7493
:: Вывод n первых строк файла
::
:: Использование:
:: head n filename
::
:: Пример:
:: head 10 %windir%\System32\drivers\etc\hosts
:: Необходим временный файл для хранения n номеров первых строк в виде "[n]"
(
for /l %%n in ( 1, 1, %~1 ) do (
echo.[%%n]
)
)>"%TEMP%\$$$head.txt"
:: нумеруем каждую строку
:: ищем только строки с заданным номером и выводим эти строки
:: по окончании временный файл удаляем
for /f "tokens=1,* delims=]" %%n in (
'find /n /v "" "%~2" ^| findstr /b /l /g:"%TEMP%\$$$head.txt" ^&^& del "%TEMP%\$$$head.txt"'
) do (
echo.%%o >> C:\programs\cmd\tcbackup2.txt
)
FOR /F %%f in ('TYPE C:\programs\cmd\tcbackup2.txt') DO (
MOVE C:\temp\TrustClient\1\%%f C:\temp\TrustClient\2\
)
DEL /F /Q C:\temp\TrustClient\1\*.*
MOVE C:\temp\TrustClient\2\*.* C:\TrustClient\backup\
DEL C:\programs\cmd\tcbackup2.txt
:END
Что он делает:
(
for /l %%n in ( 1, 1, %~1 ) do (
echo.[%%n]
)
)>"%TEMP%\$$$head.txt"
for /f "tokens=1,* delims=]" %%n in (
'find /n /v "" "%~2" ^| findstr /b /l /g:"%TEMP%\$$$head.txt" ^&^& del "%TEMP%\$$$head.txt"'
) do (
echo.%%o >> C:\programs\cmd\tcbackup2.txt
)
FOR /F %%f in ('TYPE C:\programs\cmd\tcbackup2.txt') DO (
MOVE C:\temp\TrustClient\1\%%f C:\temp\TrustClient\2\
)
В планировщике Windows нужно создать задание, которое ежедневно будет запускать скрипт tcbackup.cmd.