Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как упаковать именно содержимое множества папок, а папки удалить (http://forum.oszone.net/showthread.php?t=331172)

alexxx2011 12-11-2017 23:25 2777115

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

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

Цитата:

Цитата alexxx2011
m=7 »

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

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

alpap 13-11-2017 01:13 2777127

Код:

for /d %%a in (*) do 7z a -tzip -ssw -mx7 "%%~nxa.zip" "%%~dpnxa\*"
с удалением думаю справитесь.

alexxx2011 13-11-2017 16:04 2777247

Цитата:

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

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

Цитата:

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

Да, почитал более внимательно про "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 2777272

Цитата:

Цитата alexxx2011
а, почитал более внимательно про "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 2777300

Цитата:

Цитата megaloman
надо было читать хелп 7z и добавить ключ -sdel »

это и имел ввиду
Цитата:

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

но ТС видимо в спрвку 7z так и не заглянул.

alexxx2011 13-11-2017 21:57 2777331

Цитата:

Цитата alpap
но ТС видимо в спрвку 7z так и не заглянул. »

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

megaloman 13-11-2017 22:38 2777339

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

alexxx2011 14-11-2017 07:22 2777383

Цитата:

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

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


Время: 19:16.

Время: 19:16.
© OSzone.net 2001-