ОБНОВИТЬ: Я заметил, что многие люди просматривают эту ветку, что заставляет меня поверить, что такая ситуация не так уж редка. Во всяком случае, я задал похожий / связанный вопрос на SO Вот , который имеет довольно приличные решения, которые могут решить проблему лучше.
На моем компьютере с Windows 7 у меня есть каталог, полный загруженных дампов в ZIP-архивах. Каждый архив содержит несколько текстовых файлов, PDF-файлов и редко XML-файлов. Я хочу извлечь все содержимое каждого ZIP-архива в соответствующую папку (должна быть создана во время процесса), исключая / игнорируя извлечение PDF-файлов. После извлечения необходимых файлов из архива, обработанный zip не должен быть удаленным (или я хотел бы знать, как я могу управлять им в различных ситуациях).
Если это помогает узнать, количество архивов в каталоге находится в диапазоне от 60 до 70 тыс. Кроме того, мне нужны отдельные выходные каталоги, потому что файлы в архиве могут иметь те же имена, что и файлы в других.
Например,
- У меня есть все мои архивы, как
one.zip
,two.zip
.. скажем, вD:\data
- Я создаю новую папку для обработанных данных, скажем,
D:\extracted
- Теперь данные из
D:\data\one.zip
должен пойти вD:\extracted\one
, Вот,D:\extracted\one
должен быть создан автоматически. - Во время этого полного процесса распаковки не нужно извлекать все обнаруженные PDF-файлы (игнорировать). Нет смысла извлекать, а затем удалять.
- (Необязательный) Файл журнала должен поддерживаться, скажем, в
D:\extracted
, Идея состоит в том, чтобы использовать этот файл для возобновления обработки с того места, где он был оставлен в случае ошибки. - (Необязательный) Скрипт должен позволить мне решить, хочу ли я сохранить исходные архивы или удалить их после обработки.
Я уже провел поиск, чтобы найти решение, но не смог его найти. Я сталкивался с несколькими вопросами, подобными этим
- Рекурсивно разархивируйте файлы, где они находятся, затем удалите архив
- 7 zip экстракт рекурсивно
- Можно ли рекурсивно перечислить содержимое файла zip с 7 zip без распаковки
но они не сильно помогли (кстати, я не профессионал в Windows). Я открыт для установки безопасно и без рекламы Программное обеспечение сторонних производителей (с открытым исходным кодом), например, 7-zip.
РЕДАКТИРОВАТЬ: Есть ли готовый инструмент, чтобы делать то, что мне нужно, я уже пробовал Мульти распаковщик , Он не создает новые каталоги, он не может игнорировать файлы * .pdf. Начать даже медленно, я думаю, что сначала он читает все архивы в источнике, а затем начинает их обрабатывать.
Заранее спасибо!
Ответы:
Изменение найденного ответа Вот этот фрагмент скрипта PowerShell должен делать то, что вы хотите. Просто сохраните его как файл с расширением ".ps1". При вызове, просто назовите его как ./filename.ps1, и он извлечет файлы в отдельные папки, удалит zip-файлы и удалит все файлы с расширением .pdf. Я не проверял, правильно ли он работает с рекурсивными путями, но стоит проверить его.
Редактировать: Если вы не хотите, чтобы ваши zip-файлы были удалены, удалите или закомментируйте (#) строку
rmdir -Path $_.FullName -Force
Требования: PowerShell, 7-Zip и для вас, чтобы установить 7-Zip путь в файле
источник
set-ExecutionPolicy Unrestricted
в PowerShell от имени администратора. Я попробовал оба варианта, и они сработали, хотя 1-й вариант лучше, но это выходит за рамки этого комментария, чтобы объяснить почему.$arguments=@("e",
с$arguments=@("x",
это должно сохранить структуру каталогов, пожалуйста, проверьте это. Что касается рекурсивного извлечения, я не знаю, работает ли он так, но вы можете сделать так, чтобы скрипт сам вызывал новый каталог, в данном случае каждый подкаталог. Если в корневом каталоге папки находится zip-файл, он будет распакован. В противном случае все будет намного сложнее. Я не достаточно хорош с PowerShell, хотя.