Compress-Archive
Создает сжатый ZIP-архив из указанных файлов и каталогов.
Синтаксис
Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Update
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Force
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Update
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Force
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Описание
Командлет Compress-Archive
создает сжатый или архивный файл из одного или нескольких указанных файлов или каталогов. Архивные пакеты нескольких файлов с необязательным сжатием в один zip-файл для упрощения распространения и хранения. Архивный файл можно сжать с помощью алгоритма сжатия, указанного параметром CompressionLevel .
Командлет Compress-Archive
использует API System.IO.Compression.ZipArchive для сжатия файлов.
API ограничивает максимальный размер файла до 2 ГБ. API .NET работает с файлами, которые соответствуют официальной спецификации формата ZIP-файла PKWARE Inc. Дополнительные сведения см. в разделе System.IO.Compression.ZipArchive.
Примечание.
Командлет Compress-Archive
игнорирует скрытые файлы и папки при создании или обновлении архивного файла. На компьютерах, отличных от Windows, это включает файлы и папки с именем, начинающимся с символа периода (.
).
Чтобы убедиться, что скрытые файлы и папки сжимаются в архив, используйте ВМЕСТО этого API .NET.
В некоторых примерах используется сложение для уменьшения длины строки примеров кода. Дополнительные сведения см. в about_Splatting.
Примеры
Пример 1. Сжатие файлов для создания архивного файла
В этом примере файлы сжимаются из разных каталогов и создаются архивные файлы. Подстановочный знак используется для получения всех файлов с определенным расширением. В архивном файле нет структуры каталогов, так как путь указывает только имена файлов.
$compress = @{
Path = "C:\Reference\Draftdoc.docx", "C:\Reference\Images\*.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress
Параметр Path принимает определенные имена файлов и имена файлов с подстановочными знаками. *.vsd
Путь использует разделенный запятыми список для получения файлов из разных каталогов. Уровень сжатия является самым быстрым, чтобы сократить время обработки. Параметр DestinationPath указывает расположение файла Draft.zip
. Файл Draft.zip
содержит Draftdoc.docx
и все файлы с расширением .vsd
.
Пример 2. Сжатие файлов с помощью LiteralPath
В этом примере сжимаются определенные именованные файлы и создаются архивные файлы. В архивном файле нет структуры каталогов, так как путь указывает только имена файлов.
$compress = @{
LiteralPath= "C:\Reference\Draft Doc.docx", "C:\Reference\Images\diagram2.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress
Абсолютный путь и имена файлов используются, так как параметр LiteralPath не принимает подстановочные знаки. Путь использует разделенный запятыми список для получения файлов из разных каталогов. Уровень сжатия является самым быстрым, чтобы сократить время обработки. Параметр DestinationPath указывает расположение файла Draft.zip
. Файл Draft.zip
содержит Draftdoc.docx
только и diagram2.vsd
.
Пример 3. Сжатие каталога, включающего корневой каталог
В этом примере сжимается каталог и создается архивный файл, включающий корневой каталог, а также все его файлы и вложенные каталоги. Архивный файл содержит структуру каталогов, так как Путь указывает корневой каталог.
Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip
Compress-Archive
использует параметр Path для указания корневого каталогаC:\Reference
. Параметр DestinationPath указывает расположение архивного файла. Архив Draft.zip
включает корневой Reference
каталог и все его файлы и вложенные каталоги.
Пример 4. Сжатие каталога, исключающего корневой каталог
В этом примере сжимается каталог и создается архивный файл, который исключает корневой каталог, так как Путь использует подстановочный знак звездочки (*
). Архив содержит структуру каталогов, содержащую файлы и подкаталогы корневого каталога.
Compress-Archive -Path C:\Reference\* -DestinationPath C:\Archives\Draft.zip
Compress-Archive
использует параметр Path для указания корневого каталога C:\Reference
со звездочкой (*
) подстановочным знаком. Параметр DestinationPath указывает расположение архивного файла. Архив Draft.zip
содержит файлы и вложенные каталоги корневого каталога. Корневой Reference
каталог исключен из архива.
Пример 5. Сжатие только файлов в корневом каталоге
В этом примере сжимаются только файлы в корневом каталоге и создаются архивные файлы. В архиве нет структуры каталогов, так как сжимаются только файлы.
Compress-Archive -Path C:\Reference\*.* -DestinationPath C:\Archives\Draft.zip
Compress-Archive
использует параметр Path для указания корневого каталога C:\Reference
с подстановочным знаком star-dot-star (*.*
). Параметр DestinationPath указывает расположение архивного файла. Архив Draft.zip
содержит Reference
только файлы корневого каталога, а корневой каталог исключен.
Пример 6. Использование конвейера для архивации файлов
В этом примере файлы отправляются по конвейеру для создания архива. В архивном файле нет структуры каталогов, так как путь указывает только имена файлов.
Get-ChildItem -Path C:\Reference\Afile.txt, C:\Reference\Images\Bfile.txt |
Compress-Archive -DestinationPath C:\Archives\PipelineFiles.zip
Get-ChildItem
использует параметр Path для указания двух файлов из разных каталогов. Каждый файл представлен объектом FileInfo и отправляется по конвейеру Compress-Archive
.
Два указанных файла архивируются в PipelineFiles.zip
.
Пример 7. Использование конвейера для архивации каталога
В этом примере каталог отправляется по конвейеру для создания архива. Файлы отправляются в виде объектов и каталогов FileInfo в виде объектов DirectoryInfo. Структура каталогов архива не включает корневой каталог, но его файлы и вложенные каталоги включаются в архив.
Get-ChildItem -Path C:\LogFiles | Compress-Archive -DestinationPath C:\Archives\PipelineDir.zip
Get-ChildItem
использует параметр Path для указания корневого C:\LogFiles
каталога. Каждый объект FileInfo и DirectoryInfo отправляется по конвейеру.
Compress-Archive
добавляет каждый объект в PipelineDir.zip
архив. Параметр Path не указан, так как объекты конвейера получаются в положение параметра 0.
Пример 8. Как рекурсия может повлиять на архивы
В этом примере показано, как рекурсия может дублировать файлы в архиве. Например, если вы используете Get-ChildItem
с параметром Recurse . В процессе рекурсии каждый объект FileInfo и DirectoryInfo отправляется по конвейеру и добавляется в архив.
Get-ChildItem -Path C:\TestLog -Recurse |
Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip
Каталог C:\TestLog
не содержит файлов. Он содержит подкаталог с именем testsub
, содержащим testlog.txt
файл.
Get-ChildItem
использует параметр Path для указания корневого каталогаC:\TestLog
. Параметр Recurse обрабатывает файлы и каталоги. Объект DirectoryInfo создается для testsub
объекта FileInfo и объекта testlog.txt
FileInfo.
Каждый объект отправляется по конвейеру Compress-Archive
. DestinationPath указывает расположение архивного файла. Параметр Path не указан, так как объекты конвейера получаются в положение параметра 0.
В следующей сводке описывается PipelineRecurse.zip
содержимое архива, содержащее повторяющийся файл:
- Объект DirectoryInfo создает
testsub
каталог и содержитtestlog.txt
файл, который отражает исходную структуру каталогов. - Объект FileInfo создает дубликат
testlog.txt
в корневом каталоге архива. Создается повторяющийся файл, так как рекурсия отправляет объектCompress-Archive
файла в . Это поведение ожидается, так как каждый объект, отправляемый по конвейеру, добавляется в архив.
Пример 9. Обновление существующего архивного файла
В этом примере обновляется существующий архивный файл Draft.zip
в каталоге C:\Archives
. В этом примере существующий архивный файл содержит корневой каталог и его файлы и вложенные каталоги.
Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip
Команда обновляет Draft.zip
новые версии существующих файлов в каталоге C:\Reference
и его подкаталогах. И новые файлы, добавленные C:\Reference
в подкаталог, включаются в обновленный Draft.zip
архив.
Параметры
-CompressionLevel
Указывает, сколько сжатия применяется при создании архивного файла. Для быстрого сжатия требуется меньше времени для создания файла, но может привести к большим размерам файлов.
Если этот параметр не указан, команда использует значение по умолчанию, оптимальное.
Ниже приведены допустимые значения для этого параметра:
- Самый быстрый. Используйте самый быстрый метод сжатия, доступный для уменьшения времени обработки. Быстрое сжатие может привести к большему размеру файлов.
- NoCompression. Не сжимает исходные файлы.
- Оптимальный. Время обработки зависит от размера файла.
Тип: | String |
Допустимые значения: | Optimal, NoCompression, Fastest |
Position: | Named |
Default value: | Optimal |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Confirm
Запрос подтверждения перед выполнением командлета.
Тип: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-DestinationPath
Этот параметр является обязательным и указывает путь к выходному файлу архива. DestinationPath должен содержать имя zippped-файла, а также абсолютный или относительный путь к zippped-файлу.
Если имя файла в DestinationPath не имеет .zip
расширения имени файла, командлет добавляет .zip
расширение имени файла.
Тип: | String |
Position: | 1 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Force
Используйте этот параметр для перезаписи существующего архивного файла.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-LiteralPath
Указывает путь или пути к файлам, которые требуется добавить в архивный zip-файл. В отличие от параметра Path, значение LiteralPath используется точно так же, как и типизированный. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите каждый escape-символ в одинарные кавычки, чтобы указать PowerShell не интерпретировать какие-либо символы как escape-последовательности. Чтобы указать несколько путей и включить файлы в несколько расположений в выходном zippped-файле, используйте запятые для разделения путей.
Тип: | String[] |
Aliases: | PSPath |
Position: | Named |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-PassThru
Вызывает командлет выводить объект файла, представляющий созданный архивный файл.
Этот параметр появился в PowerShell 6.0.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Path
Указывает путь или пути к файлам, которые требуется добавить в архивный zip-файл. Чтобы указать несколько путей и включить файлы в несколько расположений, используйте запятые для разделения путей.
Этот параметр принимает подстановочные знаки. Подстановочные знаки позволяют добавлять все файлы в каталог в архивный файл.
Использование подстановочных знаков с корневым каталогом влияет на содержимое архива:
- Чтобы создать архив, включающий корневой каталог, и все его файлы и вложенные каталоги, укажите корневой каталог в path без подстановочных знаков. Например:
-Path C:\Reference
- Чтобы создать архив, который исключает корневой каталог, но zips всех его файлов и подкаталогов, используйте подстановочный знак звездочки (
*
). Например:-Path C:\Reference\*
- Чтобы создать архив, который архивирует только файлы в корневом каталоге, используйте подстановочный знак star-dot-star (
*.*
). Подкаталоги корневого каталога не включены в архив. Например:-Path C:\Reference\*.*
Тип: | String[] |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | True |
-Update
Обновляет указанный архив, заменив старые версии файлов в архиве более новыми версиями файлов с одинаковыми именами. Этот параметр также можно добавить для добавления файлов в существующий архив.
Тип: | SwitchParameter |
Position: | Named |
Default value: | False |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-WhatIf
Показывает, что произойдет при запуске командлета. Командлет не выполняется.
Тип: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
Можно передать строку, содержащую путь к одному или нескольким файлам.
Выходные данные
None
По умолчанию этот командлет не возвращает выходные данные.
При использовании параметра PassThru этот командлет возвращает объект FileInfo .
Примечания
Использование рекурсии и отправки объектов вниз конвейера может дублировать файлы в архиве. Например, если вы используете Get-ChildItem
с параметром Recurse , каждый объект FileInfo и DirectoryInfo , отправляемый вниз конвейера, добавляется в архив.
Командлет Compress-Archive
использует кодировку UTF-8. Другие средства ZIP-архива могут использовать другую схему кодирования. При извлечении файлов с именами файлов, не хранящихся в кодировке UTF-8, Expand-Archive
используется необработанное значение, найденное в архиве. Это может привести к тому, что имя файла отличается от имени исходного файла, хранящегося в архиве.
Связанные ссылки
PowerShell