1

У меня есть архив 7zip, в котором есть несколько файлов / папок, которые я хочу извлечь в определенное место. Я упростил пример, чтобы сделать его минимальным, полным и проверяемым.

-Я не хочу поддерживать структуру каталогов, поэтому я использую команду e . Я просто хочу, чтобы все файлы (во всех каталогах) были в одном месте.

-У меня есть определенный выходной каталог, поэтому я также использую -o .

Ограничение состоит в том, что я не могу изменить исходный архив (для этого потребуется другая команда, и я бы предпочел этого не делать). В идеале я бы не хотел жестко кодировать каталоги для удаления после извлечения архива.

Проблема возникает после того, как все извлечено - у меня осталось несколько пустых папок в моей выходной директории. Есть ли у 7zip способ удалить эти пустые каталоги или вообще не создавать их?

Моя командная строка 7zip выглядит так:

D:\7z.exe e D:\MyArchive.zip -oD:\ExtractToHere

Пример .zip-файла будет иметь такую структуру:

./A/1.txt
./B/2.txt
./C/3.txt
./D/fileWithNoExt

Что я хочу в моей выходной директории (и ничего больше):

./1.txt
./2.txt
./3.txt
./fileWithNoExt

В выходном каталоге у меня есть (A , B и C - все пустые каталоги):

./1.txt
./2.txt
./3.txt
./fileWithNoExt
./A/
./B/
./C/
./D/

4 ответа4

1

Есть только один способ, которым я могу думать, и у него есть подводные камни

Ваша текущая команда, но включает:

D:\7z.exe e D:\MyArchive.zip -oD:\ExtractToHere *.* -r

Проблемы с этим, однако, в том, что

  1. Файлы без расширения не будут извлечены
  2. Каталоги с. в середине их все равно извлекают

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

1

Может ли 7zip удалить пустые каталоги после распаковки архива?

В идеале я бы не хотел жестко кодировать каталоги для удаления после извлечения архива.

У меня осталось несколько пустых папок в моей выходной директории. Есть ли у 7zip способ удалить эти пустые каталоги или вообще не создавать их?

Я протестировал и подтвердил, что приведенная ниже логика работает, как и ожидалось, для удаления пустых каталогов под вашим каталогом извлечения с помощью команд 7Zip, которые вы выполняете в настоящее время.

Вам просто нужно установить исходный файл и место его извлечения, а затем скопировать и вставить его в командную строку, чтобы сделать именно то, что вы объяснили.

  • Я не уверен, что вас беспокоит жесткое программирование директории extract и имен файлов zip для извлечения, но ваш пример показывает, что вы делаете именно это. Так что этот метод ниже будет включать в себя не больше усилий, чем это, как показывает ваш пример.

Кроме того, с помощью этого метода вы можете оставить свои команды 7Zip такими же, какими вы их сейчас используете.

Этот приведенный ниже рабочий пример может быть дополнительно расширен, чтобы при необходимости циклически проходить по всем zip-файлам в определенной папке, вместо того, чтобы жестко программировать явным образом то, как у вас дела, и т.д. Я буду рад добавить пример с этим, так что просто дайте мне знать.


Пример рабочей логики командной строки

@ECHO ON
SET SourceFile=D:\MyArchive.zip
SET ExtractDir=D:\ExtractToHere

D:\7z.exe e %SourceFile% -o%ExtractDir%

FOR /F "TOKENS=*" %A IN ('"DIR /S /B /AD "%ExtractDir%""') DO RD "%~A"

Дополнительные ресурсы и чтение

0

Если вы можете запустить другую команду после распаковки, вы можете просто использовать robocopy, чтобы удалить пустые папки

 ROBOCOPY folderName folderName /S /MOVE

источник: https://stackoverflow.com/questions/7831286/how-to-delete-empty-folders-using-windows-command-prompt

0

Если двухпроходный подход является жизнеспособным, вы можете перечислить содержимое с помощью 7z l и проанализировать пустые каталоги. Оттуда вы можете либо включить то, что вы хотите, с -i либо исключить то, что вы не хотите, с -x зависимости от того, что будет для вас более эффективным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .