Скрипт архивирования на bat

Batch является языком программирования, используется для создания файлов сценарий которые можно выполнять на операционной системе Windows, обычно эти файлы имею окончание *.bat или *.cmd. При выполнении они открывают окно «Command Prompt», обычно это окно имеет черный фон, белый шрифт.
Файлы batch (*.bat, *.cmd) называются файлами сценарий (script file), они могут содержать команды вмешивающиеся в операционную систему.

@echo off
SetLocal EnableDelayedExpansion
set now=%DATE: =0% %TIME: =0%

set d=%date:~0,2%
set m=%date:~3,2%
set y=%date:~6,4%

rem ~0,2% для времени меньше 10 часов вместо ведущего нуля выводит пробел

if %d:~0,1%==0 set d=%d:~1%
if %m:~0,1%==0 set m=%m:~1%

set /a feb=y%%4
if %feb%==0 (set feb=29) else (set feb=28)

rem самописная функция для нахождения предыдущего дня
set /a tok=m-1
if %tok%==0 set tok=12
for /f «tokens=%tok%» %%i in («31 %feb% 31 30 31 30 31 31 30 31 30 31») do (
set /a d-=1
if !d!==0 (
set d=%%i
set m=%tok%
if !m!==12 set /a y-=1
)
)

set d=0%d%
set m=0%m%
set yesterday=%y%_%m:~-2%_%d:~-2%
set yesterdaylog=%d:~-2%_%m:~-2%_%y%

echo «delete and arhiving for yesterday = » %yesterday%
echo «delete and arhiving path log for yesterday = » %yesterdaylog%

rem считаем и удаляем каталог с бакапом созданный неделю назад
set T_Date=%date%
IF %T_DATE:~0,1%==0 (
set /A T_DAY=%T_DATE:~1,1%) else (
set /A T_DAY=%T_DATE:~0,2%)

IF %T_DATE:~3,1%==0 (
set /A T_MONTH=%T_DATE:~4,1%) else (
set /A T_MONTH=%T_DATE:~3,2%)
set /A T_YEAR=%T_DATE:~6,4%

rem за сколько дней удалять бакап (до 28 дней, т.к. скрипт, при «отрицательном» дне всегда делает — 1 месяц)
rem ************************
set back_day=28
rem ************************
set /A T_DAY=%T_DAY%-%back_day%

IF %T_DAY% LEQ 0 SET /A T_MONTH=%T_MONTH%-1
IF %T_MONTH%== 0 SET /A T_YEAR=%T_YEAR%-1
IF %T_MONTH%== 0 SET /A T_MONTH=12
IF %T_MONTH%==1 Set /A DIM=31
IF %T_MONTH%==2 Set /A DIM=28
IF %T_MONTH%==3 Set /A DIM=31
IF %T_MONTH%==4 Set /A DIM=30
IF %T_MONTH%==5 Set /A DIM=31
IF %T_MONTH%==6 Set /A DIM=30
IF %T_MONTH%==7 Set /A DIM=31
IF %T_MONTH%==8 Set /A DIM=31
IF %T_MONTH%==9 Set /A DIM=30
IF %T_MONTH%==10 Set /A DIM=31
IF %T_MONTH%==11 Set /A DIM=30
IF %T_MONTH%==12 Set /A DIM=31
IF %T_DAY% LEQ 0 SET /A T_DAY=%T_DAY%+%DIM%
IF %T_DAY% LSS 10 SET T_DAY=0%T_DAY%
IF %T_MONTH% LSS 10 SET T_MONTH=0%T_MONTH%

set DateArchive=%T_YEAR%_%T_MONTH%_%T_DAY%

rem Устанавливаем пути рабочей директории и директории для хранения архивов ConnectUPSH
set WorkDirConnectUPSH=»C:\SBBOL_20180216\ConnectUPSH»
set LogDirConnectUPSH=»C:\SBBOL_20180216\ARCHIVE\log_ConnectUPSH»

rem Устанавливаем пути рабочей директории и директории для хранения архивов DataToReturn
set WorkDirDataToReturn=»C:\SBBOL_20180216\dataToReturn»
set LogDirDataToReturn=»C:\SBBOL_20180216\ARCHIVE\log_DataToReturn»

rem Устанавливаем пути рабочей директории и директории для хранения архивов Exceptions
set WorkDirExceptions=»C:\SBBOL_20180216\Exceptions»
set LogDirExceptions=»C:\SBBOL_20180216\ARCHIVE\log_Exceptions»

rem Устанавливаем пути рабочей директории и директории для хранения архивов IncomingData
set WorkDirIncomingData=»C:\SBBOL_20180216\incomingData»
set LogDirIncomingData=»C\ARCHIVE\log_IncomingData»

rem Устанавливаем пути рабочей директории и директории для хранения архивов SendedToSbbol
set WorkDirSendedToSbbol=»C:\SBBOL_20180216\SendedToSbbol»
set LogDirSendedToSbbol=»C:\SBBOL_20180216\ARCHIVE\log_SendedToSbbol»

rem Устанавливаем пути рабочей директории и директории для хранения архивов log
set WorkDirlog=»C:\SBBOL_20180216\log»
set LogDirlog=»C:\SBBOL_20180216\ARCHIVE\Log»

if exist «%WorkDirConnectUPSH%\connectUPSH_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirConnectUPSH%\connectUPSH_%yesterday% %WorkDirConnectUPSH%\connectUPSH_%yesterday%.txt
if exist «%WorkDirConnectUPSH%\connectUPSH_%yesterday%.txt» del %WorkDirConnectUPSH%\connectUPSH_%yesterday%.txt

if exist «%WorkDirDataToReturn%\dataToReturn_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirDataToReturn%\dataToReturn_%yesterday% %WorkDirDataToReturn%\dataToReturn_%yesterday%.txt)
if exist «%WorkDirDataToReturn%\dataToReturn_%yesterday%.txt» del %WorkDirDataToReturn%\dataToReturn_%yesterday%.txt

if exist «%WorkDirExceptions%\error_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirExceptions%\error_%yesterday% %WorkDirExceptions%\error_%yesterday%.txt
if exist «%WorkDirExceptions%\error_%yesterday%.txt» %WorkDirExceptions%\error_%yesterday%.txt

if exist «%WorkDirIncomingData%\incommingData_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirIncomingData%\incommingData_%yesterday% %WorkDirIncomingData%\incommingData_%yesterday%.txt
if exist «%WorkDirIncomingData%\incommingData_%yesterday%.txt» del %WorkDirIncomingData%\incommingData_%yesterday%.txt

if exist «%WorkDirSendedToSbbol%\SendedToSbbol_%yesterday%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirSendedToSbbol%\SendedToSbbol_%yesterday% %WorkDirSendedToSbbol%\SendedToSbbol_%yesterday%.txt
if exist «%WorkDirSendedToSbbol%\SendedToSbbol_%yesterday%.txt» %WorkDirSendedToSbbol%\SendedToSbbol_%yesterday%.txt

echo %yesterdaylog%
if exist «%WorkDirlog%\%yesterdaylog%.txt» «C:\Program Files\7-Zip\7z.exe» a -ssw -mx9 -r0 %LogDirlog%\Log_%yesterdaylog% %WorkDirlog%\%yesterdaylog%.txt
if exist «%WorkDirlog%\%yesterdaylog%.txt» del %WorkDirlog%\%yesterdaylog%.txt

rem удаление файлов за back_day
if exist «%LogDirConnectUPSH%\connectUPSH_%DateArchive%.7z» del %LogDirConnectUPSH%\connectUPSH_%DateArchive%.7z
if exist «%LogDirDataToReturn%\dataToReturn_%DateArchive%.7z» del %LogDirDataToReturn%\dataToReturn_%DateArchive%.7z
if exist «%LogDirExceptions%\error_%DateArchive%.7z» del %LogDirExceptions%\error_%DateArchive%.7z
if exist «%LogDirIncomingData%\incommingData_%DateArchive%.7z» del %LogDirIncomingData%\incommingData_%DateArchive%.7z
if exist «%LogDirSendedToSbbol%\SendedToSbbol_%DateArchive%.7z» del %LogDirSendedToSbbol%\SendedToSbbol_%DateArchive%.7z
if exist «%LogDirlog%\%DateArchive%.7z» del %LogDirlog%\%DateArchive%.7z

удаление файлов c начала года
set /a ArchiveMonth=%T_MONTH% + 1
echo «Delete old file»
for /L %%B in (1,1,%ArchiveMonth%) do (
for /L %%C in (1,1,31) do (
IF %%B LSS %T_MONTH% if exist «%LogDirConnectUPSH%\connectUPSH_%T_YEAR%_%%B_%%C.7z» start ( del %LogDirConnectUPSH%\connectUPSH_%T_YEAR%_%%B_%%C.7z)
IF %%B LSS %T_MONTH% if exist «%LogDirDataToReturn%\dataToReturn_%T_YEAR%_%%B_%%C.7z» start (del %LogDirDataToReturn%\dataToReturn_%T_YEAR%_%%B_%%C.7z)
IF %%B LSS %T_MONTH% if exist «%LogDirExceptions%\error_%T_YEAR%_%%B_%%C.7z» start (del %LogDirExceptions%\error_%T_YEAR%_%%B_%%C.7z)
IF %%B LSS %T_MONTH% if exist «%LogDirIncomingData%\incommingData_%T_YEAR%_%%B_%%C.7z» start (del %LogDirIncomingData%\incommingData_%T_YEAR%_%%B_%%C.7z)
IF %%B LSS %T_MONTH% if exist «%LogDirSendedToSbbol%\SendedToSbbol_%T_YEAR%_%%B_%%C.7z» start (del %LogDirSendedToSbbol%\SendedToSbbol_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirConnectUPSH%\connectUPSH_%T_YEAR%_%%B_%%C.7z» start (del %LogDirConnectUPSH%\connectUPSH_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirDataToReturn%\dataToReturn_%DateArchive%.7z» start (del %LogDirDataToReturn%\dataToReturn_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirDataToReturn%\dataToReturn_%T_YEAR%_%%B_%%C.7z» start del (%LogDirExceptions%\error_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirIncomingData%\incommingData_%T_YEAR%_%%B_%%C.7z» start (del %LogDirIncomingData%\incommingData_%T_YEAR%_%%B_%%C.7z)
IF %%B EQU %T_MONTH% IF %%C LEQ %T_DAY% if exist «%LogDirSendedToSbbol%\SendedToSbbol_%T_YEAR%_%%B_%%C.7z» start (del %LogDirSendedToSbbol%\SendedToSbbol_%T_YEAR%_%%B_%%C.7z)
)
)