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

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

Ответить
Настройки темы
CMD/BAT - Архивирование каталога

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


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

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


Изменения
Автор: UserX
Дата: 01-11-2018
Здравствуйте!

Помогите, пожалуйста, со следующими вопросами.

1.
Есть каталог Src и каталог Dst.
Требуется создать батник, который будет запускаться периодически, т.е. от случая к случаю, и который будет добавлять архивы ВСЕХ каталогов, включая их подкаталоги, из Src в Dst с именами архивов, совпадающими с именами каталогов первого уровня из Src.
То есть, после отработки такого батника, в Dst должны создаться все несуществующие там архивы с именами, совпадающими с именами каталогов первого уровня из Src.
Архивы в Dst могут быть как *.rar, *.zip, *.7z и пр. одновременно. Важны лишь сами имена без их архивного расширения.
В целях ускорения работы такого батника при его повторных запусках, хотелось бы, чтобы при наличии в каталоге Dst архивов (*.rar, *.zip, *.7z и пр.) с именами каталогов из Src, эти каталоги из Src повторно в Dst не переархивировались.
То есть, если запустить такой батник в случае, когда в Dst уже имеются все имена архивов, совпадающие (без учёта архивного расширения типа .rar, .zip, .7z и пр.) c именами каталогов первого уровня из Src, то такой батник ничего не должен создавать или перепаковывать.
При этом должно быть допустимым наличие в Dst прочего содержимого - как файлов, так и папок, которые вообще не имеют отношения к именам из Src.

2.
Если предположить частный случай по первому вопросу - имена каталогов первого уровня в Src находятся в формате даты YYYYMMDD, хотелось бы отдельным батником установить реальные даты создания/изменения этих каталогов в соответствии с их именами. Время не важно.

Буду признателен за помощь.

Отправлено: 22:08, 01-11-2018

 

Ветеран


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

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


Чересчур дурная лабораторка.

Отправлено: 03:38, 02-11-2018 | #2



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

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


Ветеран


Contributor


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

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


UserX,
лабораторка?
Код: Выделить весь код
@Echo Off
cls
	Set "Src=Z:\Box_In\Мой контент\Книги\*.*"
	Set "Dst=Z:\Книги.arc"

	Set Arc="C:\Program Files\7-Zip\7zG.exe" a -r 
	Set "Ext=7Z"

	If Not Exist "%Dst%" Md "%Dst%"
	FOR /D %%d IN ("%Src%") DO (
		If Not Exist "%Dst%\%%~nxd.*" (Echo "%%d" &%Arc% "%Dst%\%%~nxd.%Ext%" "%%d\*.*")
	)
pause
Цитата UserX:
хотелось бы отдельным батником установить реальные даты создания/изменения этих каталогов в соответствии с их именами. Время не важно. »
Моя Ваша не понимайт.
Есть, например, папка 20180925. Что должно происходить в батнике и какой результат его работы?

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


Последний раз редактировалось megaloman, 02-11-2018 в 18:31.

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

Отправлено: 18:25, 02-11-2018 | #3


Ветеран


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

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


Цитата megaloman:
Моя Ваша не понимайт. »
Я ж говорил — лабораторка дурная .

Отправлено: 18:33, 02-11-2018 | #4


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


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

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


megaloman, огромное Вам спасибо за Ваш отклик без излишней демонстрации своего превосходства над оппонентом.
Сейчас опробую Ваш батничек и отпишусь.

Цитата megaloman:
Есть, например, папка 20180925. Что должно происходить в батнике и какой результат его работы? »
Да просто эта эта папка 20180925 должна получить дату своего создания и изменения 25.09.2018, и всё.

Iska, и вам спасибо за то, что оказались неравнодушны. Ибо, как сказал Юлиус Фучек: "Бойся равнодушных! Это с их молчаливого согласия совершается всё зло на земле!"
Очевидно, вас бояться не следует.

Последний раз редактировалось UserX, 02-11-2018 в 19:04.


Отправлено: 18:58, 02-11-2018 | #5


Ветеран


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

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


Цитата megaloman:
Что значит получить? »
Это значит, что дорога лежит в PowerShell, поскольку на пакетных файлах нет средств для задания таких свойств в принципе (сторонние средства в расчёт не берём), на WSH свойства .DateCreated/.DateLastModified — только для чтения (дату последней модификации ещё можно задать посредством Shell → Folder → FolderItem.ModifyDate, но больно уж извращённый способ получается).
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:24, 02-11-2018 | #6


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


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

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


Цитата megaloman:
Что значит получить? »
Это значит, что дата создания этой папки не совпадает с датой, определяемой именем папки. Хотелось бы это устранить и привести в соответствие.

megaloman, проверил Ваш батник.
Немного его изменил под себя и всё ПРЕВОСХОДНО сработало.
Огромное Вам спасибо!
----------------------------
@Echo Off
cls
Set "Src=C:\111\Src\*.*"
Set "Dst=C:\111\Dst"

Set Arc="C:\Program Files\WinRar\Rar.exe" a -r -ep1 -dh -m5 -s -rr5p -ts+ -y
Set "Ext=rar"

If Not Exist "%Dst%" Md "%Dst%"

FOR /D %%d IN ("%Src%") DO (
If Not Exist "%Dst%\%%~nxd.*" (Echo "%%d" &%Arc% "%Dst%\%%~nxd.%Ext%" "%%d\*.*")
)
----------------------------

Если не использовать ключ -ep1, то в архиве сохраняется весь путь C:\111\Src\Cat_name
Ключ -ep1 подавил сохранение в архиве лишнего пути, правда, несколько больше, чем хотелось бы.
А без этого ключа задача как-то решается?

Последний раз редактировалось UserX, 02-11-2018 в 20:01.


Отправлено: 19:45, 02-11-2018 | #7


Ветеран


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

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


megaloman, а я понял так, что дату создания и дату последней модификации каталога надо задавать по содержащейся в его имени дате (время при этом несущественно).

Отправлено: 20:23, 02-11-2018 | #8


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


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

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


Цитата megaloman:
То есть, если папка 20180925 изменялась 20180929, то её надо переименовать? 20180925-->20180929 »

Не-не, вообще ничего переименовывать не нужно. Просто в результате обычного копирования были утрачены исходные даты создания папок. Но эти исходные даты создания папок являются именами этих папок.
Так что нужно взять папку с именем 20180925 и (можно даже ничего не проверяя) установить ей дату 20180925.
Соответвственно, папка с именем 20180929 должна получить дату 20180929.
То есть, после отработки, батник должен привести дату создания файла в соответствие с его именем.

Извините, пожалуйста, что не слишком понятно ставил вопрос.

Отправлено: 20:35, 02-11-2018 | #9


Ветеран


Contributor


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

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


Цитата UserX:
Ключ -ep1 подавил сохранение в архиве лишнего пути, правда, несколько больше, чем хотелось бы »
UserX,
А так, Если не использовать ключ -ep1? (остальные ключи не трогал и смысл их наизусть не помню - Ваша ответственность). Но, ИМХО, m5 -это чересчур, иногда архив получается больше, чем m3, а время радикально увеличивается
Код: Выделить весь код
@Echo Off
cls
	Set "Src=Z:\Box_In\Мой контент\Книги"
	Set "Mask=*.*"
	
	Set "Dst=Z:\Книги.arc"

	Set Arc="C:\Program Files\WinRar\WinRar.exe" a -r -dh -m5 -s -rr5p -ts+ -y
	Set "Ext=rar"


	If Not Exist "%Dst%" Md "%Dst%"
	Pushd "%Src%" &&(
		FOR /D %%d IN ("%Mask%") DO (
			If Not Exist "%Dst%\%%~nxd.*" (Echo %%~td "%%d" &%Arc% "%Dst%\%%~nxd.%Ext%" "%%d\*.*")
		)
	Popd
	)
pause
Здесь Mask - это маска имён папок (не файлов!). Можно, например, задать 20??????.
Iska, Вы поняли, что надо изменить атрибуты файла
Цитата Iska:
на пакетных файлах нет средств для задания таких свойств в принципе (сторонние средства в расчёт не берём »
Тогда мне не фиг ловить в рамках этого решения делать нечего.

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


Последний раз редактировалось megaloman, 02-11-2018 в 20:59.

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

Отправлено: 20:39, 02-11-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - архивирование и шифрование каталога Jalo Скриптовые языки администрирования Windows 10 24-12-2013 01:33
Любой язык - Сравнение списка файлов и каталога с файлами с копированием файлов из каталога jastreb83 Скриптовые языки администрирования Windows 0 10-04-2013 09:56
CMD/BAT - Архивирование с удалением каталога при помощи запуска батника из того же каталога HAMMER7 Скриптовые языки администрирования Windows 0 09-04-2012 20:29
CMD/BAT - Архивирование stolyar Скриптовые языки администрирования Windows 8 28-03-2010 13:33
Архивирование Maniacosaur Программирование и базы данных 6 27-08-2002 21:34




 
Переход