Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Архивирование за N дней и удаление исходников

Ответить
Настройки темы
CMD/BAT - [решено] Архивирование за N дней и удаление исходников

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!
Прошу помощи..
Необходимо добавить в скрипт чтобы архивировались файлы за последние 10 дней и удалялись исходники после архивации в папке. ( у самого нифига не получается)

Код: Выделить весь код
@Echo Off
Setlocal Enableextensions
chcp 1251
cls
	Set "BoxIn=C:\Box_In" - Откуда 
	Set "BoxArc=C:\Box_Arc" - Куда 

	Set "ARC=C:\Program Files\7-Zip\7z.exe" - Архиватор 

        >"C:\Box_In\%~nx0.log" (Dir "%BoxIn%" &Dir "%BoxArc%" &Dir "%ARC%")

	For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\*_?????????.*" /B /A:-D forfiles /D 30 ^|FindStr /I /R /C:"^.*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\."`) Do (
		Set "Name=%%~nf"
		Call Set "Name=%%Name:~-9%%"
		Call Echo "%%f" %%Name%%
		>nul Call "%ARC%" u -tzip "%BoxArc%\%%Name%%.zip" "%BoxIn%\%%f"                
)

del /s /a "%BoxIn%\"*.m

Exit /B

Отправлено: 08:27, 22-10-2021

 

Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата Kofeinchik:
за последние 10 дней »
А что с остальными? Как часто Вы собрались архивировать файлы? Один раз ручками более старые файлы куда-то деть слабо? Или они вечно будут болтаться?
Без ограничения по дням
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "BoxArc=Z:\Box_Arc"
	Set "Mask=*_?????????.m"
	Set FMask="^.*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.m"
	Set /A NN=9

	Set "ARC=C:\Program Files\7-Zip.21beta\7z.exe"
 
	For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D ^|FindStr /I /R /C:%FMask%`) Do (
		If Exist "%BoxIn%\%%f" (
			Set "Name=%%~nf"
			Call Set "Name=%%Name:~-%NN%%%"
			Call Echo "%%f" %%Name%%
			>nul Call "%ARC%" a -tzip -sdel "%BoxArc%\%%Name%%.zip" "%BoxIn%\*_%%Name%%%%~xf"
		)
	)
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:27, 22-10-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
А что с остальными? Как часто Вы собрались архивировать файлы? Один раз ручками более старые файлы куда-то деть слабо? Или они вечно будут болтаться?
Без ограничения по дням
Спасибо , Суть в том есть папка в которую попадают файлы , много , нужно архивировать через планировщик задач каждый час через планировщик задач и переносить в другую папку и докидывать по номеру в созданые архивы только за 10 дней старые файлы нужно оставить без архивации в папке.

Отправлено: 10:43, 22-10-2021 | #3


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Kofeinchik,
с 7zip получается длинно
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "BoxArc=Z:\Box_Arc"
	Set "Mask=*_?????????.m"
	Set FMask="^.*\\.*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.m$"
	Set /A NN=9
	Set /A DeltaDay=-10

	Set "ARC=C:\Program Files\7-Zip.21beta\7z.exe"


	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "ToDay=%%d" &Call :FromDate %DeltaDay% %%ToDay:~6,2%%.%%ToDay:~4,2%%.%%ToDay:~0,4%% "DDat"

	For /F "usebackq delims=" %%f In (`2^>nul xcopy /L /D:%DDat:~4,2%-%DDat:~6,2%-%DDat:~0,4% "%BoxIn%\%Mask%" "%Tmp%" ^|FindStr /I /R /C:%FMask%`) Do (
		If Exist "%%f" (
			Set "Name=%%~nf"
			Call Set "Name=%%Name:~-%NN%%%"
			Call Echo "%%f" %%Name%%
			>nul Call "%ARC%" a -tzip -sdel "%BoxArc%\%%Name%%.zip" "%BoxIn%\*_%%Name%%%%~xf"
		)
	)
pause
Exit /B

:FromDate

rem Пересчет даты на заданное кол-во дней
rem В первом аргументе +- дни
rem Во втором аргументе дата в формате dd.mm.yyyy
rem В третем аргументе имя переменной в кавычках где получим новую дату в формате yyyymmdd 

rem Заимствовано http://forum.oszone.net/thread-186889.html
rem вызов Call :FromNow %DeltaDay% %Date% "yyyymmdd"
rem результат в перемменной %yyyymmdd%

SetLocal
	Set "DT=%~2"
	Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
	Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
	Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
	Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
	Set /A J=J+2-12*L,I=100*(N-49)+I+L
	Set /A yyyy=I,mm=100+J,dd=100+K
EndLocal& Set "%~3=%yyyy%%mm:~-2%%dd:~-2%"
GoTo :Eof
Вариант с WinRar
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "BoxArc=Z:\Box_Arc"
	Set "Mask=*_?????????.m"
	Set FMask="^.*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.m$"
	Set /A NN=9
	Set /A DeltaDay=10

	Set "ARC=C:\Program Files\WinRAR\WinRAR.exe"
 
	For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D ^|FindStr /I /R /C:%FMask%`) Do (
		If Exist "%BoxIn%\%%f" (
			Set "Name=%%~nf"
			Call Set "Name=%%Name:~-%NN%%%"
			Call "%ARC%" u -ibck -ep -afzip -tn%DeltaDay%d -df "%BoxArc%\%%Name%%" "%BoxIn%\*_%%Name%%%%~xf"	
			2>nul Call Dir /b /A:-D "%BoxArc%\%%Name%%.*"
		)
	)
pause
Exit /B
Другая идея: все старые файлы переместить в отдельную папку. Раз и навсегда это упорядочит Ваши файлы.
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "BoxArc=Z:\Box_Arc"
	Set "Mask=*_?????????.m"
	Set FMask="^.*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\.m$"
	Set /A NN=9
	Set /A DeltaDay=-10

	Set "ARC=C:\Program Files\7-Zip.21beta\7z.exe"

	2>nul Md "%BoxIn%\OldFiles"
	2>nul FORFILES /P "%BoxIn%" /M "%Mask%" /D %DeltaDay% /C "cmd /C >nul Move /Y @path "%BoxIn%\OldFiles\"
 
	For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D ^|FindStr /I /R /C:%FMask%`) Do (
		If Exist "%BoxIn%\%%f" (
			Set "Name=%%~nf"
			Call Set "Name=%%Name:~-%NN%%%"
			Call Echo "%%f" %%Name%%
			>nul Call "%ARC%" a -tzip -sdel "%BoxArc%\%%Name%%.zip" "%BoxIn%\*_%%Name%%%%~xf"
		)
	)
pause
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 22-10-2021 в 15:50.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:15, 22-10-2021 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Архивирование за N дней и удаление исходников

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Архивирование и удаление файлов в папке старше n дней ryoryoryo Скриптовые языки администрирования Windows 14 09-04-2021 15:19
CMD/BAT - копирование и архивирование, удаление art_27 Скриптовые языки администрирования Windows 0 18-03-2014 16:39
CMD/BAT - удаление и архивирование в распределенной файловой системе Uuups Скриптовые языки администрирования Windows 1 22-07-2013 13:30
Прочее - удаление файлов старше 10 дней admin666 Общий по Linux 1 23-07-2009 19:09
удаление программ из исходников Zheka1 Программное обеспечение Linux и FreeBSD 8 17-08-2004 13:57




 
Переход