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

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

Ответить
Настройки темы
Любой язык - [решено] backup файлов прошлого месяца
it3 it3 вне форума

Пользователь


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

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


Изменения
Автор: it3
Дата: 15-09-2018
Добрый день!
Есть необходимость написать BAT-файл, который бы архивировал файлы прошлого месяца и складывал в отдельную папку.
Вот мои наброски - но что то пошло не так (не работает). Подсобите пожалуйста.
Код: Выделить весь код
@echo on

set  param=%1
set source=f:\Share\LOGS\%param:"=%
set  dst=%source%\bkp
set  dst_tmp=%dst%\tmp

echo %date%
set d=%date:~0,2%
set /a m=%date:~3,2%-1
set y=%date:~6,4%

if %m:~0,1% neq 1 set m=0%m%
set date_prep=%y%%m%%d%
set date_ym=%y%%m%
echo %date_prep%

if not exist "%dst%" md "%dst%"
if not exist "%dst_tmp%" md "%dst_tmp%"
pause
if %param% == "bkp" goto expt
goto for

:expt
echo "ќвг Ї*ЇЄг *Ґ ва®Ј*Ґ¬"
goto end

:for
forfiles /m *%date_ym%*.* -p "%source%"  /C  "cmd /c move @file \"%dst_tmp%\""

goto bkp

:bkp 
"%ProgramFiles(x86)%\7-Zip\7z.exe" a -tzip -mx9 "%dst%\%param:"=%_%date_ym%.zip" "%dst_tmp%\*.*"
IF %ERRORLEVEL%==0 goto ok
goto end
:ok
del "%dst_tmp%\*.*"  /q
rd "%dst_tmp%"
goto end

:end

Отправлено: 15:24, 13-09-2018

 
it3 it3 вне форума Автор темы

Пользователь


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

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


Цитата megaloman:
Как понимать, файлы, изменённые/созданные только в прошлом месяце? Изменённые в другом месяце не рассматриваем? »
Прошу прощения. Все файлы, кроме файлов текущего месяца.

Отправлено: 06:14, 14-09-2018 | #2



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

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


Ветеран


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

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


it3, не надо в батниках пытаться работать с датой - потом запустите его в системе с другой локалью и получите полный ахтунг. Пользуйтесь WSH, PoSh.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:07, 14-09-2018 | #3

it3 it3 вне форума Автор темы

Пользователь


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

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


Цитата Busla:
it3, не надо в батниках пытаться работать с датой - потом запустите его в системе с другой локалью и получите полный ахтунг. Пользуйтесь WSH, PoSh. »
Подсобите пожалуйста.

Отправлено: 11:31, 15-09-2018 | #4


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата it3:
Подсобите пожалуйста. »
Для того, чтобы подсобить, необходимо сначала определиться в чём.
Опишите подробнее условия и что именно требуется.
Архивируются все файлы или определенного типа, или целиком каталог с подкаталогами? и т.д., и т.п.

-------
scio me nihil scire. Ѫ


Отправлено: 13:48, 15-09-2018 | #5

it3 it3 вне форума Автор темы

Пользователь


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

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


Цитата YuS_2:
Для того, чтобы подсобить, необходимо сначала определиться в чём.
Опишите подробнее условия и что именно требуется.
Архивируются все файлы или определенного типа, или целиком каталог с подкаталогами? и т.д., и т.п. »
Есть каталоги:
W:\LOGS\Folder1\
W:\LOGS\Folder2\
W:\LOGS\Folder3\
W:\LOGS\Folder4\
В них находятся *.txt файлы разного наименования.
Необходимо, чтобы все файлы, кроме тех что созданы в текущем месяце, архивировались и складывались сюда с таким именем:
W:\LOGS\Folder1\bkp\Folder1_201805.zip
W:\LOGS\Folder2\bkp\Folder2_201806.zip
W:\LOGS\Folder3\bkp\Folder3_201807.zip
W:\LOGS\Folder4\bkp\Folder4_201808.zip

Отправлено: 14:37, 15-09-2018 | #6


Ветеран


Contributor


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

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


it3,
Вот решение по Вашей идеологии, пропишите свои пути и подпапки
Если конкретно указывать папки, то
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Share\LOGS"
	Set "SubBox="Folder1" "Folder2" "Folder3" "Folder4""
	Set "Mask=*.txt"
rem	Set "Mask=*.*"

	Set ARC="%ProgramFiles(x86)%\7-Zip\7z.exe" a -tzip -mx9 -sdel
rem	Set ARC="%ProgramFiles%\7-Zip\7z.exe" a -tzip -mx9 -sdel


	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
	Set "Xdate=%Tdate:~4,2%-01-%Tdate:~0,4%"
	Set /A Zdate=%Tdate:~0,4%%Tdate:~4,2%
	If %Zdate:~4,2%==01 (Set /A Zdate=%Zdate%-89) Else (Set /A Zdate=%Zdate%-1)

	For %%d In (%SubBox%) Do Call :ArcDir "%BoxIn%" "%%~d" "%Mask%" "%Xdate%" "%Zdate%"
Pause
GoTo :Eof

:ArcDir
	Echo "%~1\%~2\%~3" "%~2_%~5"  

	Set "Source=%~1\%~2"
	Set "Dst=%Source%\bkp"
	Set "Dst_Tmp=%Dst%\tmp"
	If Not Exist "%Dst_Tmp%" md "%Dst_Tmp%"
	Pushd "%Dst_Tmp%" || (Echo "%Dst_Tmp%" not found &Exit /B 1)

	xcopy /l /D:%~4 "%Source%\%~3" "%Tmp%" >"%Dst_Tmp%\~tmp.tmp" 2>nul
	FOR /F "usebackq delims=" %%f in (`xcopy /L /D /Exclude:~tmp.tmp "%Source%\%~3"`) DO If Exist "%%f" Move /Y "%%f" "%Dst_Tmp%\" >nul
	Del ~tmp.tmp

	%Arc% "%Dst%\%~2_%~5.zip" %3 >nul

	Popd
GoTo :Eof
Если обработать все подпапки указанной папки
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Share\LOGS"
	Set "Mask=*.txt"

	Set ARC="%ProgramFiles(x86)%\7-Zip\7z.exe" a -tzip -mx9 -sdel

	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Tdate=%%d"
	Set "Xdate=%Tdate:~4,2%-01-%Tdate:~0,4%"
	Set /A Zdate=%Tdate:~0,4%%Tdate:~4,2%
	If %Zdate:~4,2%==01 (Set /A Zdate=%Zdate%-89) Else (Set /A Zdate=%Zdate%-1)

	FOR /F "usebackq delims=" %%d in (`Dir "%BoxIn%" /A:D /B 2^>nul`) DO (
		Call :ArcDir "%BoxIn%" "%%~d" "%Mask%" "%Xdate%" "%Zdate%"
	)
Pause
GoTo :Eof
И далее процедура из предыдущего кода

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


Последний раз редактировалось megaloman, 17-09-2018 в 09:41. Причина: Дополнение решения в связи с уточнением постановки

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

Отправлено: 20:55, 15-09-2018 | #7


Аватара для YuS_2

Crazy


Contributor


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

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


it3, и это все подробности? м-да...
Ок.
Как часто будет происходить архивация - ежедневно, еженедельно, ежемесячно? Если чаще, чем ежемесячно, то что делать при совпадении имени архива? Что делать с исходными файлами - удалять или оставлять? Есть ли какие-либо подкаталоги или файлы в корневом каталоге, а также в подкаталогах "Folder*", кроме обозначенных *.txt?

Временное решение:
powershell
Код: Выделить весь код
function arch-filter {
	process{
		$dname = $_.basename
		if(!(test-path (
			$a = $_.fullname + $f_bck
		) -patht container)){md $a|out-null}
		$arr = dir $_.fullname -filt $flt2 -file|%{
			if($_.lastwritetime.month -le (get-date).addmonths(-1).month){
				$_.fullname
			}
		}
		if($arr){
			compress-archive $arr ($a+'\'+$dname+(
				'_{0:yyyy-MM-dd_HH-mm}' -f (get-date))+'.zip'
			)
#если требуется удаление исходных файлов, то раскомментировать следующую строку
			#del (gi $arr).fullname -force
		} else {
			write-host "В каталоге $dname файлы для архивирования отсутствуют." -foreg yellow
		}
	}
}

$fld = 'logs' #корневой каталог, лучше указать абсолютный путь
$f_bck = '\bkp' #подкаталог для хранения архивов (обязательный формат со слешем)
$flt1 = 'folder*' #фильтр для отбора каталогов содержащих файлы *.txt
$flt2 = '*.txt' #фильтр для отбора только файлов *.txt

dir $fld -filt $flt1 -dir|arch-filter

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 16-09-2018 в 08:37. Причина: поправил код


Отправлено: 21:14, 15-09-2018 | #8

it3 it3 вне форума Автор темы

Пользователь


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

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


Цитата YuS_2:
it3, и это все подробности? м-да...
Ок.
Как часто будет происходить архивация - ежедневно, еженедельно, ежемесячно? Если чаще, чем ежемесячно, то что делать при совпадении имени архива? Что делать с исходными файлами - удалять или оставлять? Есть ли какие-либо подкаталоги или файлы в корневом каталоге, а также в подкаталогах "Folder*", кроме обозначенных *.txt? »
Ежемесячно - поэтому совпадений имен не должно быть. Исходные файлы удалять после архивирования. Подкаталог "bkp" есть в каждом каталоге - этот та папка, в которую складываются архивы. Кроме *.txt нет.

Есть каталоги:
W:\LOGS\Любое имя1\
W:\LOGS\Имя любое2\
W:\LOGS\Третье имя3\
W:\LOGS\Разное4\
... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ...
В них находятся *.txt файлы разного наименования.

Необходимо, чтобы все файлы, кроме тех что созданы в текущем месяце, архивировались и складывались сюда с таким именем:

W:\LOGS\Любое имя1\bkp\Любое имя1_201805.zip
W:\LOGS\Имя любое2\bkp\Имя любое2_201806.zip
W:\LOGS\Третье имя3\bkp\Третье имя3_201807.zip
W:\LOGS\Разное4\bkp\Разное4_201808.zip
... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ... ... ...

Отправлено: 09:00, 17-09-2018 | #9


Ветеран


Contributor


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

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


it3,
Цитата Популярная застольная песТня:
В каждой строчке только точки, догадайся, мол, сама!
Дополнил своё решение для обзора всех подпапок указанной папки. Одна строка удалена, одна заменена.

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


Отправлено: 09:39, 17-09-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удаление всех файлов в папке бекап - кроме первой записи каждого месяца fabble86@vk Скриптовые языки администрирования Windows 12 13-12-2017 12:34
CMD/BAT - [решено] Копирование файлов бекапов из папок за 1,10,20 число каждого месяца alevakr Скриптовые языки администрирования Windows 4 17-11-2017 10:52
2008 R2 - [решено] Не могу создать Backup задачу через планировщик. Windows Server Backup/ deem73 Windows Server 2008/2008 R2 4 23-12-2014 09:03
CMD/BAT - BackUp файлов с выбором папок codi28 Скриптовые языки администрирования Windows 0 10-05-2014 16:49
CMD/BAT - Бекапирование Оутлук заблокированных pst файлов (backup Outlook) почты через bat/cmd biossa Скриптовые языки администрирования Windows 0 28-09-2011 22:02




 
Переход