Показать полную графическую версию : Архивация по маске
привет всем.
имеем
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", можно указать маску хотя бы папки с названием дат, чтобы руками не класть скрипт
forfiles /S /P c:\temp /C "cmd /c if @isdir==TRUE (echo @relpath | findstr /R \"\.\\.*\\.*\\.*\\.*\"> nul && 7z a -sdel @path.zip @path\* && rmdir @path)"
регулярку лучше подогнать под используемый формат даты
формат даты одинаков везде, типа "01.02.16"
2) Структуру папок - год/месяц/дата/заказ(ы) »
формат даты одинаков везде, типа "01.02.16" »
что-то не сходится и я не про точку или дробь вместо обратного слэша
или это 16 февраля 2001 года?
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, извиняюсь, решил, что подразумевается день месяца, а не дата полностью, а рекомендация моя касалась всего пути
как в этот скрипт добавить команды, чтобы все эти файлы архивировались поотдельности в каждый архив? »
почти никак - скорее, подобным образом сделать второй этап обработки, да и толку от сжатия jpeg очень мало - это уже очень эффективно сжатые данные
и хорошо бы перед удалением исходной папки архиватор тестировал архив на ошибки, но это необязательно.) »
уберите ключ -sdel, добавьте через && проверку архива, а к rmdir ключи /S и /Q
только надо понимать, что в таком случае процессы архивации и удаления будут разнесены во времени и совершенно независимы друг от друга
вот накалякал типа такого скрипта, выполняется вроде.
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
подправьте, если что-то коряво написано.
хотелось бы еще скрипт запускать из любого места, лишь с указанием пути в переменной сверху, (никак не разберусь как это сделать), а так - его надо обязательно класть в папку "месяц" ("декабрь", например), чтобы работал (если положить выше в папку "год", то начнет шерстить в других папках "месяц" (типа "январь" и "март" и все еще оставшиеся, если они есть) - а это неудобно)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.