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

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

Ответить
Настройки темы
CMD/BAT - Архивация по маске

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


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

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


Изменения
Автор: Skylear
Дата: 30-07-2018
привет всем.
имеем
1) 7Zip
2) Структуру папок - год/месяц/дата/заказ(ы)

задача:
1) необходимо запаковать с помощью скрипта все каталоги поотдельности, лежащие внутри папки "дата", - заказ001 (далее заказ002, 003....) в архив с сохранением имени "заказ001.7z" (002,003....)
2) удалить заархивированные папки, чтобы остались только архивы

должны получить структуру типа -
год1/месяц1/дата1/заказ001.7z
год2/месяц2/дата2/заказ001.7z

ну и так далее, собственно превратить в архивы все что ниже папки "дата"


в общем то вот этот скрипт

Код: Выделить весь код
for /D %%i in (*.*) do "C:\Program Files\7-zip\7z.exe" a "%%i.7z" -mx9 "%%i"
pause
архивирует папки внутри одной папки, типа "дата1\заказ001" (002, 003), но только если его руками класть в папку "дата1", а папки с названием дат лежат в папке с названием "месяц1", можно указать маску хотя бы папки с названием дат, чтобы руками не класть скрипт

Отправлено: 21:06, 30-07-2018

 

Ветеран


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

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


Код: Выделить весь код
forfiles /S /P c:\temp /C "cmd /c if @isdir==TRUE (echo @relpath | findstr /R \"\.\\.*\\.*\\.*\\.*\"> nul && 7z a -sdel @path.zip @path\* && rmdir @path)"
регулярку лучше подогнать под используемый формат даты
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:20, 30-07-2018 | #2



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

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


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


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

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


формат даты одинаков везде, типа "01.02.16"

Отправлено: 22:25, 30-07-2018 | #3


Ветеран


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

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


Цитата Skylear:
2) Структуру папок - год/месяц/дата/заказ(ы) »
Цитата Skylear:
формат даты одинаков везде, типа "01.02.16" »
что-то не сходится и я не про точку или дробь вместо обратного слэша
или это 16 февраля 2001 года?

Отправлено: 22:47, 30-07-2018 | #4


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


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

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


1 февраля 2016 года.

формат структуры таков:
2015\февраль\01.02.15\заказ001
2015\февраль\01.02.15\заказ002
2016\апрель\01.04.16\заказ001

типа такого.
формат названия папки в виде даты такой)
в общем подкорректировал скрипт следущющим образом, работает

Код: Выделить весь код
forfiles /S /P H:\SHARE2\test /C "cmd /c if @isdir==TRUE (echo @relpath | findstr /R \"\.\\.*\\.*\\.*\\.*\"> nul && c:\Progra~1\7-zip\7z.exe a -sdel @path.7z -mx9 @path\* && rmdir @path)"

pause
ругался на 7z, пришлось дописать путь, и изменил сжатие и формат архива, сейчас тестирую, вроде правильно все....


еще один момент, кроме папок с именами "заказов" рядом лежат еще просто файлы, типа *.jpg и др..
как в этот скрипт добавить команды, чтобы все эти файлы архивировались поотдельности в каждый архив?
типа файл:
"2015\февраль\01.02.15\картинка001.jpg" стал отдельным архивом.

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

Последний раз редактировалось Skylear, 30-07-2018 в 23:09.


Отправлено: 22:58, 30-07-2018 | #5


Ветеран


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

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


Skylear, извиняюсь, решил, что подразумевается день месяца, а не дата полностью, а рекомендация моя касалась всего пути

Цитата Skylear:
как в этот скрипт добавить команды, чтобы все эти файлы архивировались поотдельности в каждый архив? »
почти никак - скорее, подобным образом сделать второй этап обработки, да и толку от сжатия jpeg очень мало - это уже очень эффективно сжатые данные

Цитата Skylear:
и хорошо бы перед удалением исходной папки архиватор тестировал архив на ошибки, но это необязательно.) »
уберите ключ -sdel, добавьте через && проверку архива, а к rmdir ключи /S и /Q
только надо понимать, что в таком случае процессы архивации и удаления будут разнесены во времени и совершенно независимы друг от друга

Отправлено: 10:22, 31-07-2018 | #6


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


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

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


вот накалякал типа такого скрипта, выполняется вроде.

Код: Выделить весь код
Set BoxIn="H:\SHARE2\Архивы проектов дизайнеров\2016\Январь"


FOR /D /r %%F in ("*") DO (

pushd %CD%
cd %%F
FOR %%X in (*.rar, *.zip, *.7z) DO (
"C:\Program Files\7-zip\7z.exe" x "%%X" -y
)
popd

)

del /s %BoxIn%\*.zip
del /s %BoxIn%\*.rar
del /s %BoxIn%\*.7z


forfiles /S /P %BoxIn% /C "cmd /c if @isdir==TRUE (echo @relpath | findstr /R \"\.*\\.*\\.*\"> nul && c:\Progra~1\7-zip\7z.exe a -sdel @path.7z -mx9 @path\* && rmdir @path)"

Set "BoxIn1=H:\SHARE2\Архивы проектов дизайнеров\2016\Январь"
Set "Maska=*.tif"

Set "Arc="C:\Program Files\7-zip\7z.exe" a -mx9"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn1%\%Maska%" /b /s /a:-d`) DO (
	Echo %%f
	%Arc% "%%~f.7z" "%%f"
)

del /s "%BoxIn1%\"*.tif



Set "BoxIn2=H:\SHARE2\Архивы проектов дизайнеров\2016\Январь"
Set "Maska2=*.psd"

Set "Arc="C:\Program Files\7-zip\7z.exe" a -mx9"

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn2%\%Maska2%" /b /s /a:-d`) DO (
	Echo %%f
	%Arc% "%%~f.7z" "%%f"
)

del /s "%BoxIn2%\"*.psd

Pause

1) разархивирует все архивы, которые есть в данной папке и ее подпапках
2) удаляет эти архивы, оставляя только файлы
3) делает архивацию папок, лежащих в "датах" (но одного месяца, в котором лежит скрипт)
4) удаляет исходники, оставляя архивы
5) архивирует оставшиеся файлы форматов psd и tif, которые найдет в папке и подпапках
6) удаляет файлы psd и tif


подправьте, если что-то коряво написано.
хотелось бы еще скрипт запускать из любого места, лишь с указанием пути в переменной сверху, (никак не разберусь как это сделать), а так - его надо обязательно класть в папку "месяц" ("декабрь", например), чтобы работал (если положить выше в папку "год", то начнет шерстить в других папках "месяц" (типа "январь" и "март" и все еще оставшиеся, если они есть) - а это неудобно)

Последний раз редактировалось Skylear, 02-08-2018 в 13:05.


Отправлено: 10:36, 31-07-2018 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - скрипт по копирвоанию и последующего удаления файлов по маске названия файла santey007 Скриптовые языки администрирования Windows 19 22-12-2015 10:43
CMD/BAT - Копирование файлов в папки по маске файла и маске папки (BAT) skyskiff Скриптовые языки администрирования Windows 7 20-09-2015 22:41
CMD/BAT - Поиск файлов по маске на удаленных машинах по словарю с выгрузкой в *.txt gremlintv2 Скриптовые языки администрирования Windows 3 09-12-2013 04:46
CMD/BAT - розархивация файлов по маске с архива отсортированого по датах VitHAK Скриптовые языки администрирования Windows 1 28-12-2009 11:07




 
Переход