Вот написал такой скрипт, не судите строго, может пригодится кому-то
Код:
@echo off
rem *************************************************************************************
rem ****Переменные**** *
rem *************************************************************************************
rem Папка в которую складываются архивы
Set Kuda="D:\Program Files\Trash"
rem Файл-список в котором записаны названия папок для бекапа и удаления старых файлов
set List="D:\Program Files\Batch\bak.lst"
rem Если архив с текущей датой существует - отмена бекапа
::If Exist загрузки_%Date%.rar GoTo End
Echo.
Echo #*******************************#
Echo * Бэкап начнется через 10 сек. *
Echo *-------------------------------*
Echo * Запуск - нажми 1 *
Echo * Отмена - нажми 2 *
Echo #*******************************#
Echo.
rem При запуске скрипта есть выбор, автоматически через 10 секунд запустится архивация.
Choice /c 12 /t 10 /d 1
rem Переменные ErrorLevel определяют выбор пользователя или по истечению 10 сек. запускается бекап
If Errorlevel 2 Goto :Cancel
If Errorlevel 1 Goto :Start
Goto End
:Start
rem *************************************************************************************
rem ****WinRAR**** архивация *
rem A Добавить файлы в архив *
rem -r Включить в обработку вложенные папки *
rem -ed Не добавлять пустые папки *
rem -ep1 Исключить базовую папку из имён *
rem -ibck Запустить WinRAR как фоновый процесс в области уведомлений (системном лотке) *
rem -m<n> Метод сжатия *
rem -df Удалить файлы после архивации *
rem -to<время> Обрабатывать файлы более старые, чем указанный период времени *
rem -ilog[имя] Записывать протокол ошибок в файл *
rem -log[формат][=имя] Записать имена в файл-протокол *
rem ^ перенос строк *
rem *************************************************************************************
Echo Архивируется...
"%programfiles%\WinRar\Winrar.exe" a -r -ed -ep1 -ibck ^
-ilog%Kuda%\%date%_backup.log -logf=%Kuda%\%date%_backup.txt ^
-m1 -df -to5h %Kuda%\%date%_backup.rar @%List%
rem Проверка архивации, если 0, то готово, если не 0, то ошибка
if errorlevel = 0 (Echo Архивация завершена!) ELSE (Echo Ошибка!)
rem Код ошибки, если нужна информация
Echo %ErrorLevel%
rem Отчет добавляем в архив
If exist %Kuda%\%date%_backup.txt "%programfiles%\WinRar\Winrar.exe" a ^
-ep -ibck -df -m1 %Kuda%\%date%_backup.rar %Kuda%\%date%_backup.txt
if errorlevel = 0 (echo Отчет внутри архива!) Else (echo Отчета нет!)
rem *************************************************************************************
rem ****Циклическая проверка запущен ли WinRar.exe**** *
rem Если запущен - повторяется проверка, если нет - начинается очистка пустых папок *
rem *************************************************************************************
:checker
tasklist /FI "IMAGENAME eq winrar.exe" /NH | findstr /i "winrar.exe">nul
if %errorLevel% == 0 goto :checker
echo Вин рар завершил работу
rem *************************************************************************************
rem ****Удаление пустых папок из списка bak.lst**** *
rem Если в файл-списке записана папка из нее удаляются все пустые папки и подпапки *
rem *************************************************************************************
rem Переключение кодировки в ANSI 1251 для распознавания русских названий папок.
rem 1>nul это скрытие вывода в консоли информации о переключении кодировки.
1>nul chcp 1251
goto start
:fn1
rem Для правильного отображения переключаем кодировку обратно.
1>nul chcp 866
for /d %%i in ("%~1\*") do (
call :fn1 "%%i"
rd /q "%%i"
)
exit /b
:start
rem Функция отбора папок в файл-списке.
FOR /F "usebackq delims=" %%a in (%List%) do call :fn1 %%a
rem удаление архивов старше 30 дней
FORFILES /p %Kuda% /S /D -30 /C "cmd /c del @path /f /q"
GoTo End
:Cancel
echo Отмена.
goto end
Файл bak.lst содержит названия папок для бэкапа. Более подробно описано в справке winrar (только берите винрар от 5-ой версии, там есть лог)