Войти

Показать полную графическую версию : [решено] Как упаковать именно содержимое множества папок, а папки удалить


alexxx2011
12-11-2017, 23:25
Мозги у меня уже не самые молодые и я далек от скриптов, поэтому прошу помощи.

Нужно решение на батниках и с применением архиватора 7z.

Вопрос №1 Как упаковать содержимое множества папок (упаковать не папки, а их содержимое) в архивы по имени папок, а папки удалить
Вопрос №2 Как прикрутить параметр архиватора 7z, чтобы командная строка не принимала его за имя файла

Теперь чуть подробнее.

Есть папки:

папка 001 в которой например папка ABC в которой есть файлы
папка 002 в которой просто лежат файлы

Пример:


001
ABC
111.txt
222.txt

002
333.txt
444.txt
Подобных папок как 001 и 002 может быть много.

Вот такая вот строка (подсмотрел в интернете) упаковывает все папки в zip-архивы

for /D %%i in (*) do "c:\Program Files\7-Zip\7z.exe" a -tzip %%i.zip %%i

Получаем архивы 001.zip и 002.zip, но архивируются именно папки 001 и 002, а мне надо в архиве получить содержимое этих папок,
то есть чтобы при входе в архив 001.zip была видна папка ABC, а при входе в 002.zip файлы 333.txt и 444.txt
Упакованные папки потом ещё удалить как-то надо.

Решение:

for /D %%a in (*) do "c:\Program Files\7-Zip\7z.exe" a -tzip -mx7 "%%~nxa.zip" "%%~dpnxa\*"&&rd /s /q "%%a"



Второй момент.
Никак не соображу. Мне надо в командную строчку вставить метод компрессии m=7 например.
Если вставляю вот так
for /D %%i in (*) do "c:\Program Files\7-Zip\7z.exe" a -tzip %%i.zip %%i m=7
то архиватор ругается, что файла m=7 нет и пакует папки с m=3 (по умолчанию).

mwz
13-11-2017, 00:43
m=7 »

???
1. Не указан символ ключа (или дефис, или восходящий слэш)
2. И вообще неверная форма записи для указания степени компрессии: у вас должно быть в итоге -mx7 (cмотрим документацию на 7-zip и разжёвывающую статью на Хабре (https://habrahabr.ru/post/72636/)).

Да и ключи надо бы указывать до, а не после списка пакуемых файлов (т.е. ......-tzip -mx7 %%i.zip %%i)

alpap
13-11-2017, 01:13
for /d %%a in (*) do 7z a -tzip -ssw -mx7 "%%~nxa.zip" "%%~dpnxa\*"

с удалением думаю справитесь.

alexxx2011
13-11-2017, 16:04
1. Не указан символ ключа (или дефис, или восходящий слэш)
2. И вообще неверная форма записи для указания степени компрессии: у вас должно быть в итоге -mx7 »

Да, что-то я вчера ночером слишком быстро по документации пробежался глазами и выхватив "-m<method_parameters>", а ниже "x=[0 | 1 | 3 | 5 | 7 | 9 ]" слишком поспешил в чем и каюсь.
Спасибо за подсказку.

с удалением думаю справитесь. »

Да, почитал более внимательно про "for" и осилил


for /d %%a in (*) do "c:\Program Files\7-Zip\7z.exe" a -tzip -mx7 "%%~nxa.zip" "%%~dpnxa\*"&&rd /s /q "%%a"


Спасибо!

megaloman
13-11-2017, 17:31
а, почитал более внимательно про "for" и осилил »Не то почитали :closed-to , надо было читать хелп 7z и добавить ключ -sdel@Echo Off
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"

Set "Arc="C:\Program Files\7-Zip\7z.exe" a -tzip -mx7 -sdel"

For /d %%a in ("%BoxIn%\*") Do %Arc% "%BoxOut%\%%~nxa.zip" "%%a"

alpap
13-11-2017, 18:27
надо было читать хелп 7z и добавить ключ -sdel »
это и имел ввиду
с удалением думаю справитесь »
но ТС видимо в спрвку 7z так и не заглянул.

alexxx2011
13-11-2017, 21:57
но ТС видимо в спрвку 7z так и не заглянул. »
ТС просто не стал всю справку штудировать, а был занят освоением for. Ему это очень сильно нравилось и он был на седьмом небе от счастья, когда приделал там в конце строки удаление. :)
Для Вас такое ерунда и мелочь, а для меня вот такое вот маленькое счастье. :yes:

megaloman
13-11-2017, 22:38
alexxx2011, не делайте так, позвольте это сделать архиватору, это безопаснее.
А For это в самом деле увлекательно :)

alexxx2011
14-11-2017, 07:22
alexxx2011, не делайте так, позвольте это сделать архиватору, это безопаснее. »

В боевом варианте скрипта удалением будет заниматься как раз 7z.




© OSzone.net 2001-2012