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

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

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

Новый участник


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

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


Изменения
Автор: alexxx2011
Дата: 13-11-2017
Описание: Окончательный вариант скрипта
Мозги у меня уже не самые молодые и я далек от скриптов, поэтому прошу помощи.

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

Отправлено: 23:25, 12-11-2017

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


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

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

-------
Mikhail Zhilin

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:43, 13-11-2017 | #2



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

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


Ветеран


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

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


Код: Выделить весь код
for /d %%a in (*) do 7z a -tzip -ssw -mx7 "%%~nxa.zip" "%%~dpnxa\*"
с удалением думаю справитесь.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:13, 13-11-2017 | #3


Новый участник


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

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


Цитата 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"
Спасибо!

Последний раз редактировалось alexxx2011, 13-11-2017 в 16:09.


Отправлено: 16:04, 13-11-2017 | #4


Ветеран


Contributor


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

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


Цитата alexxx2011:
а, почитал более внимательно про "for" и осилил »
Не то почитали , надо было читать хелп 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"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 13-11-2017 в 17:37.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:31, 13-11-2017 | #5


Ветеран


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

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


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

Отправлено: 18:27, 13-11-2017 | #6


Новый участник


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

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


Цитата alpap:
но ТС видимо в спрвку 7z так и не заглянул. »
ТС просто не стал всю справку штудировать, а был занят освоением for. Ему это очень сильно нравилось и он был на седьмом небе от счастья, когда приделал там в конце строки удаление.
Для Вас такое ерунда и мелочь, а для меня вот такое вот маленькое счастье.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:57, 13-11-2017 | #7


Ветеран


Contributor


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

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


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 13-11-2017 в 23:14.


Отправлено: 22:38, 13-11-2017 | #8


Новый участник


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

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


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

Отправлено: 07:22, 14-11-2017 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
HDD - [решено] Как удалить содержимое папки, которое невидимо? G-Simon Накопители (SSD, HDD, USB Flash) 28 31-08-2016 16:15
Службы - [решено] удалить Удалить содержимое папки IZOprogman Microsoft Windows 7 5 31-05-2015 19:52
CMD/BAT - Удалить все папки и содержимое папок с диска levjenia Скриптовые языки администрирования Windows 3 19-01-2015 16:17
CMD/BAT - [решено] Удалить всё содержимое указанной папки iDrug Скриптовые языки администрирования Windows 6 31-01-2014 13:10
CMD/BAT - [решено] Как удалить все папки кроме папок с названием длиной в 14 символов? yaoleg2 Скриптовые языки администрирования Windows 9 26-03-2011 03:49




 
Переход