Можно ли создать zip-архив с помощью PowerShell?
powershell
zip
archive
Валентин Васильев
источник
источник
Ответы:
Если вы зайдете в CodePlex и возьмете расширения сообщества PowerShell , вы можете использовать их
write-zip
командлет.поскольку
Вы можете перейти в галерею PowerShell .
источник
write-zip [input file/folder] [output file]
Чистая альтернатива PowerShell, которая работает с PowerShell 3 и .NET 4.5 (если вы можете ее использовать):
Просто введите полный путь к zip-архиву, который вы хотите создать, и полный путь к каталогу, содержащему файлы, которые вы хотите заархивировать.
источник
PowerShell v5.0 добавляет
Compress-Archive
иExpand-Archive
командлеты. На связанных страницах есть полные примеры, но суть этого:источник
Compress-Archive
описания: «... максимальный размер файла, который вы можете сжать с помощью Compress-Archive, в настоящее время составляет 2 ГБ. Это ограничение базового API». Однако, если вы используете,System.IO.Compression.ZipFile
вы можете обойти это ограничение.System.IO.Compression.ZipFile
. Если используемая вами среда .NET не имеет этого ограничения, CmdLet не должен превышать этот предел. Я подтвердил в коде.-OutputPath
параметров.Родной путь с новейшей платформой .NET 4.5, но полностью без функциональности:
Создание:
Экстракция:
Как уже упоминалось, полностью без функций, так что не ожидайте флаг перезаписи .
ОБНОВЛЕНИЕ: см. Ниже для других разработчиков, которые расширили это за эти годы ...
источник
Установите 7zip (или загрузите вместо него версию командной строки) и используйте этот метод PowerShell:
Вы можете позвонить так:
источник
& "C:\Program Files\7-Zip\7z.exe" a -tzip ($file.FullName+".zip") $file.FullName
Лот изменился с момента публикации первоначального ответа. Вот некоторые из последних примеров использования команды Compress-Archive .
Команда для создания нового файла архива,
Draft.zip
сжимая два файла,Draftdoc.docx
иdiagram2.vsd
, заданнаяPath
параметром. Уровень сжатия, указанный для этой операции, является оптимальным.Команда для создания нового файла архива,
Draft.zip
сжимая два файла,Draft doc.docx
иDiagram [2].vsd
, указанныхLiteralPath
параметром. Уровень сжатия, указанный для этой операции, является оптимальным.Команда для создания нового файла архива
Draft.zip
, вC:\Archives
папке. Новый архивный файл содержит каждый файл в папке C: \ Reference , поскольку вместо конкретных имен файлов в параметре Path использовался подстановочный знак .Команда создает архив из всей папки,
C:\Reference
PowerShell
.zip
автоматически добавляет расширение к имени файла.источник
Отредактируйте два - Этот код - уродливый, уродливый клуг с древних времен. Ты не хочешь этого.
Это сжимает содержимое
.\in
to.\out.zip
с System.IO.Packaging.ZipPackage, следуя приведенному здесь примеруИзменить: Ненадежный для больших файлов, может быть> 10 МБ, YMMV. Что-то связанное с доказательствами appdomain и изолированным хранилищем. Более дружественный подход .NET 4.5 прекрасно работает с PS v3, но в моем случае требовалось больше памяти. Чтобы использовать .NET 4 из PS v2, файлы конфигурации нуждаются в неподдерживаемой настройке .
источник
Давая ниже другой вариант. Это заархивирует полную папку и запишет архив по указанному пути с заданным именем.
Требуется .NET 3 или выше
источник
Вот собственное решение для PowerShell v5, использующее командлет
Compress-Archive
Создание Zip-файлов с помощью PowerShell .Смотрите также Документы Microsoft для Compress-Archive .
Пример 1:
Пример 2:
Пример 3:
источник
Для сжатия я бы использовал библиотеку (7-Zip хорош, как предлагает Михал ).
Если вы установите 7-Zip , в установленном каталоге будет находиться
7z.exe
консольное приложение.Вы можете вызвать его напрямую и использовать любую опцию сжатия, какую захотите.
Если вы хотите взаимодействовать с DLL, это также должно быть возможно.
7-Zip является бесплатным и открытым исходным кодом.
источник
Как насчет
System.IO.Packaging.ZipPackage
?Это потребует .NET 3.0 или выше.
через Андерса Хессельбома
источник
Почему никто не смотрит на документацию ?? Существует поддерживаемый метод создания пустого zip-файла и добавления к нему отдельных файлов, встроенных в ту же библиотеку .NET 4.5, на которую ссылаются все.
Ниже приведен пример кода:
Я рекомендую вам просмотреть документацию, если у вас есть какие-либо вопросы.
источник
Это действительно неясно, но работает. 7za.exe является автономной версией 7zip и доступна с установочным пакетом.
источник
Если кому-то нужно сжать один файл (а не папку): http://blogs.msdn.com/b/jerrydixon/archive/2014/08/08/zipping-a-single-file-with-powershell.aspx
источник
Вот рабочий код, архивирующий все файлы из исходной папки и создающий zip-файл в целевой папке.
источник
Примечание:
ZipName: полный путь к файлу Zip, который вы хотите создать.
SourceDirectory: полный путь к каталогу, содержащему файлы, которые вы хотите заархивировать.
источник
Вот немного улучшенная версия ответа sonjz, она добавляет опцию перезаписи.
источник
Это также должно работать для сжатия одного файла без использования временной папки и использования .Net 4.5, преобразованного из C # из этого ответа StackOverflow . Он использует лучше, используя синтаксис, взятый отсюда .
Использование:
ZipFiles -zipFilename output.zip -sourceFile input.sql -filename name.inside.zip.sql
Код:
С помощью:
источник
shell.application
бизнеса или 7-Zip / других отдельных утилит. МнеUsing-Object
тоже нравится эта функция, хотя я пошел на более короткий, быстрый и грязный подход без этого.Я использую этот фрагмент, чтобы проверить папку резервных копий в моей базе данных на наличие еще не сжатых файлов резервных копий, сжать их с помощью 7-Zip и, наконец, удалить
*.bak
файлы, чтобы сэкономить место на диске. Файлы уведомлений упорядочены по длине (от наименьшего к наибольшему) перед сжатием, чтобы избежать сжатия некоторых файлов.Здесь вы можете проверить скрипт PowerShell для резервного копирования, сжатия и передачи этих файлов по FTP .
источник
Если у вас установлен WinRAR:
Значение аргументов: afzip создает zip-архив, df удаляет файлы, ep1 не создает полный путь к каталогу в архиве
источник
Вот полный пример командной строки для запуска из cmd.exe или из ssh или что вы хотите!
С уважением
источник
Загрузка
[System.IO.IOException]
класса и использование его методов является важным шагом для подавления нежелательных ошибок, поскольку этот класс не является родным для PowerShell, поэтому ожидайте различные контексты ошибок без него.Я контролирую ошибки моего скрипта для T, но при использовании
[System.IO.Compression.ZipFile]
класса получаю много лишних красных выводов «файл существует»Что я делаю здесь, так это перехват этих ошибок ввода-вывода, таких как доступ к уже существующим файлам, перехват этой ошибки и направление ее в файл журнала, который я веду с помощью более крупной программы.
источник
Полные команды командной строки в Windows для сжатия и распаковки каталогов:
Для сжатия:
Для извлечения:
источник
Ионный подход пород:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
поддерживает пароли, другие методы шифрования и т. д.
источник
Этот скрипт перебирает все каталоги и архивирует каждый
Get-ChildItem -Атрибуты d | foreach {write-zip $ .Name "$ ($ .Name) .zip"}
источник