CMD/BAT - Паковать папки и переносить последний архив в другую папку

Ответить
Аватара пользователя
Super_Kolobok

CMD/BAT - Паковать папки и переносить последний архив в другую папку

Сообщение Super_Kolobok »

Приветствую

Есть папка 1 с папками бекапов А, Б, С, ...., есть необходимость при появлении новой папки паковать ее в отдельный архив с удалением папки, и копировать архив с последней датой в другую папку 2, предварительно очистив ее.



Спасибо
Аватара пользователя
DJ Mogarych

Re: CMD/BAT - Паковать папки и переносить последний архив в другую папку

Сообщение DJ Mogarych »

А папки бекапов А, Б, С должны оставаться там всегда?
Аватара пользователя
Super_Kolobok

Re: CMD/BAT - Паковать папки и переносить последний архив в другую папку

Сообщение Super_Kolobok »

Сейчас там остается 3 папки, каждый новый бекап затирает самую старую
Аватара пользователя
Super_Kolobok

Re: CMD/BAT - Паковать папки и переносить последний архив в другую папку

Сообщение Super_Kolobok »

Цитата Super_Kolobok:



есть необходимость при появлении новой папки паковать ее
CMD/BAT - Паковать папки и переносить последний архив в другую папку




моментально или после какого-то периода/события?
Аватара пользователя
Super_Kolobok

Re: CMD/BAT - Паковать папки и переносить последний архив в другую папку

Сообщение Super_Kolobok »

зачем моментально, бекап по расписанию идет, паковать потом тоже периодически по расписанию



можно совсем упростить - Нужно паковать только последнюю созданную папку
Аватара пользователя
DJ Mogarych

Re: CMD/BAT - Паковать папки и переносить последний архив в другую папку

Сообщение DJ Mogarych »

Цитата Super_Kolobok:



паковать только последнюю созданную папку
CMD/BAT - Паковать папки и переносить последний архив в другую папку




Весь вопрос-то именно в этом - по какому критерию скрипт должен понять, какая папка последняя созданная и что это новая папка, а не уже существовавшая.
Аватара пользователя
YuS_2

Re: CMD/BAT - Паковать папки и переносить последний архив в другую папку

Сообщение YuS_2 »

Цитата DJ Mogarych:



по какому критерию скрипт должен понять, какая папка последняя созданная и что это новая папка, а не уже существовавшая.
CMD/BAT - Паковать папки и переносить последний архив в другую папку




Так ведь есть критерий: по времени. А была она там или нет - неважно... если я правильно понял.


Цитата Super_Kolobok:



можно совсем упростить - Нужно паковать только последнюю созданную папку
CMD/BAT - Паковать папки и переносить последний архив в другую папку




powershell



Код:

Код: Выделить всё

function Compress-New {
	param(
		[Parameter(Mandatory,ValueFromPipeline)]
		$source,
		$destination,
		$swt1,
		$swt2,
		$arch
	)
	process{
		$aout = $destination + '\' + $_.name + ('_{0:yyyy-MM-dd_HH-mm-ss}' -f (get-date))+'.zip'
		$compress = @{
			Path = $source
			#CompressionLevel = "Fastest"
			DestinationPath = $aout
		}
		if (!$swt1){
			compress-archive @compress
			if ($swt2) {del $source.fullname -force -rec}
		} else {
			if ($swt2) {&$arch a $aout $source -sdel} else {&$arch a $aout $source}
		}
	}
}
# каталог с архивами, лучше указать абсолютный путь:
$root = '.\1'
# целевой каталог для хранения новых архивов, лучше указать абсолютный путь:
$destination = '.\2'
$par = @{
	Destination = (gi $destination).fullname
	# путь к файлу внешнего архиватора 7zip
	Arch = "d:\Program Files\7-Zip\7z.exe"
	# ключ для выбора вида компрессии: 0 - встроенная упаковка, 1 - внешний архиватор 7zip
	Swt1 = 1
	# ключ для выбора удаления исходных файлов: 0 - не удалять, 1 - удалять
	Swt2 = 1
}
if (dir $par.destination){
	del $par.destination -rec -force
	$null = md $par.destination
}
dir $root -dir|sort lastwritetime -des|select -first 1|compress-new @par
Аватара пользователя
megaloman

Re: CMD/BAT - Паковать папки и переносить последний архив в другую папку

Сообщение megaloman »

Цитата Super_Kolobok:



Есть папка 1 с папками бекапов А, Б, С,
CMD/BAT - Паковать папки и переносить последний архив в другую папку





Цитата Super_Kolobok:



Сейчас там остается 3 папки, каждый новый бекап затирает самую старую
CMD/BAT - Паковать папки и переносить последний архив в другую папку





Цитата Super_Kolobok:



при появлении новой папки паковать ее в отдельный архив с удалением папки
CMD/BAT - Паковать папки и переносить последний архив в другую папку




Не надо удалять папку, это делает средство создания бэкапа. В противном случае, при возможном сбое Вы будете архивировать оставшиеся более старые папки, а актуальный бэкап будет утерян.

Вот вариант:

- если в папке 2 уже есть архив последней папки (имя "дата время.7Z"), то ничего не делаем

- в противном случае делаем архив самой свежей папки с именем "дата время.7Z"

-в случае благополучного завершения архивации очищаем 2 папку от архивов и переносим туда новый архив.

Код:

Код: Выделить всё

@Echo Off &Cls &>nul Chcp 1251
	Set "BoxIn=Z:\Box_In"
	Set "BoxOut=\\192.168.100.23\Test2"
	Set Arc="C:\Program Files\7-Zip\7z.exe" a -r  
	Pushd "%BoxIn%" || (Echo Folder "%BoxIn%\" not found &Pause &Exit /B 2)
		For /F "usebackq delims=" %%i In (`2^>nul Dir /B /A:D /T:W /O:D`) Do (Set "DirName=%%i" &Set "DirDate=%%~ti")
		Set "DirDate=%DirDate::=.%"
		Set "DirDate=%DirDate:/=.%"
		Set "DirDate=%DirDate:\=.%"
		If Exist "%BoxOut%\%DirDate%.7Z" Exit /B 1
		%Arc% "%DirDate%.7Z" "%DirName%" &&(Del "%BoxOut%\*7Z" &Move "%DirDate%.7Z" "%BoxOut%\")
	Popd
Exit /B
Ответить

Вернуться в «Скриптовые языки администрирования Windows»