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

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

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

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


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

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


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

Спасибо

Отправлено: 02:06, 05-04-2024

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 09:22, 05-04-2024 | #2



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

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


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


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

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


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

Отправлено: 10:27, 05-04-2024 | #3


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Super_Kolobok:
есть необходимость при появлении новой папки паковать ее »
моментально или после какого-то периода/события?

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


Отправлено: 12:21, 05-04-2024 | #4


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


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

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


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

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

Последний раз редактировалось Super_Kolobok, 05-04-2024 в 14:15.


Отправлено: 12:35, 05-04-2024 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 18:01, 05-04-2024 | #6


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата DJ Mogarych:
по какому критерию скрипт должен понять, какая папка последняя созданная и что это новая папка, а не уже существовавшая. »
Так ведь есть критерий: по времени. А была она там или нет - неважно... если я правильно понял.
Цитата Super_Kolobok:
можно совсем упростить - Нужно паковать только последнюю созданную папку »
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

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


Отправлено: 20:48, 05-04-2024 | #7


Ветеран


Contributor


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

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


Цитата Super_Kolobok:
Есть папка 1 с папками бекапов А, Б, С, »
Цитата Super_Kolobok:
Сейчас там остается 3 папки, каждый новый бекап затирает самую старую »
Цитата Super_Kolobok:
при появлении новой папки паковать ее в отдельный архив с удалением папки »
Не надо удалять папку, это делает средство создания бэкапа. В противном случае, при возможном сбое Вы будете архивировать оставшиеся более старые папки, а актуальный бэкап будет утерян.
Вот вариант:
- если в папке 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

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


Отправлено: 09:16, 08-04-2024 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Из папки с архивами разных баз скопировать только последние версии в другую папку Super_Kolobok Скриптовые языки администрирования Windows 1 06-08-2022 13:17
CMD/BAT - [решено] скопировать папку в другую папку, открыть sublime_text.exe и отключить обновление v79italya Скриптовые языки администрирования Windows 9 04-11-2019 22:17
Создать zip архив папки с подпапками и файлами без корневой папки blackeangel Программирование в *nix 1 02-02-2017 10:31
Перенаправление в другую папку binx Вебмастеру 0 15-11-2014 23:45
2008 - Чем примонтировать сетевую папку в другую папку? Actor Windows Server 2008/2008 R2 9 20-01-2014 21:58




 
Переход