CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить

Ответить
Аватара пользователя
alexxx2011

CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить

Сообщение alexxx2011 »

Мозги у меня уже не самые молодые и я далек от скриптов, поэтому прошу помощи.



Нужно решение на батниках и с применением архиватора 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

Re: CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить

Сообщение mwz »

Цитата alexxx2011:



m=7
CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить




???

1. Не указан символ ключа (или дефис, или восходящий слэш)

2. И вообще неверная форма записи для указания степени компрессии: у вас должно быть в итоге -mx7 (cмотрим документацию на 7-zip и разжёвывающую
статью на Хабре
).



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

Re: CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить

Сообщение alpap »

Код:

Код: Выделить всё

for /d %%a in (*) do 7z a -tzip -ssw -mx7 "%%~nxa.zip" "%%~dpnxa\*"

с удалением думаю справитесь.
Аватара пользователя
alexxx2011

Re: CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить

Сообщение alexxx2011 »

Цитата mwz:



1. Не указан символ ключа (или дефис, или восходящий слэш)

2. И вообще неверная форма записи для указания степени компрессии: у вас должно быть в итоге -mx7
CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить




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

Спасибо за подсказку.




Цитата alpap:



с удалением думаю справитесь.
CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить




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





Код:

Код: Выделить всё

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

Спасибо!
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить

Сообщение megaloman »

Цитата alexxx2011:



а, почитал более внимательно про "for" и осилил
CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить




Не то почитали Изображение , надо было читать хелп 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"
Аватара пользователя
alexxx2011

Re: CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить

Сообщение alexxx2011 »

Цитата alpap:



но ТС видимо в спрвку 7z так и не заглянул.
CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить




ТС просто не стал всю справку штудировать, а был занят освоением for. Ему это очень сильно нравилось и он был на седьмом небе от счастья, когда приделал там в конце строки удаление. Изображение

Для Вас такое ерунда и мелочь, а для меня вот такое вот маленькое счастье. Изображение
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить

Сообщение megaloman »

alexxx2011, не делайте так, позвольте это сделать архиватору, это безопаснее.

А For это в самом деле увлекательно Изображение
Аватара пользователя
alexxx2011

Re: CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить

Сообщение alexxx2011 »

Цитата megaloman:



alexxx2011, не делайте так, позвольте это сделать архиватору, это безопаснее.
CMD/BAT - [решено] Как упаковать именно содержимое множества папок, а папки удалить




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

Вернуться в «Скриптовые языки администрирования Windows»