当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Compress-Archive (Microsoft.PowerShell.Archive)

作者:精品下载站 日期:2024-12-14 02:25:24 浏览:15 分类:玩电脑

Compress-Archive (Microsoft.PowerShell.Archive)


Compress-Archive

模块 :Microsoft.PowerShell.Archive

从指定的文件和目录创建压缩存档或压缩文件。

句法

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 cmdlet 从一个或多个指定的文件或目录创建压缩的存档文件。存档将多个文件(可选压缩)打包为单个压缩文件,以便于分发和存储。可以使用 CompressionLevel 参数指定的压缩算法来压缩存档文件。

Compress-Archive cmdlet 使用System.IO.Compression.ZipArchive API 来压缩文件。 API 将最大文件大小限制为 2GB。有关详细信息,请参阅 System.IO.Compression.ZipArchive。

笔记

创建或更新存档文件时,Compress-Archive cmdlet 会忽略隐藏文件和文件夹。在非 Windows 计算机上,这包括名称以句点 (.) 字符开头的文件和文件夹。

为了确保隐藏文件和文件夹被压缩到存档中,请改用 .NET API。

一些示例使用展开来减少代码示例的行长度。有关详细信息,请参阅 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.docxdiagram2.vsd

示例 3:压缩包含根目录的目录

此示例压缩目录并创建一个存档文件,其中包括根目录及其所有文件和子目录。存档文件具有目录结构,因为 Path 指定了根目录。

Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip

Compress-Archive 使用Path 参数指定根目录C:\ReferenceDestinationPath 参数指定存档文件的位置。 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 带有星点-星号强> (*.*) 通配符。 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 根目录。每个 FileInfoDirectoryInfo 对象都沿着管道发送。

Compress-Archive 将每个对象添加到 PipelineDir.zip 存档中。未指定 Path 参数,因为管道对象被接收到参数位置 0。

示例 8:递归如何影响档案

此示例显示递归如何复制存档中的文件。例如,如果您将 Get-ChildItemRecurse 参数一起使用。在递归过程中,每个 FileInfoDirectoryInfo 对象都会沿着管道发送并添加到存档中。

Get-ChildItem -Path C:\TestLog -Recurse |
  Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip

C:\TestLog 目录不包含任何文件。它确实包含一个名为 testsub 的子目录,其中包含 testlog.txt 文件。

Get-ChildItem 使用Path 参数指定根目录C:\TestLogRecurse 参数处理文件和目录。为 testsub 创建一个 DirectoryInfo 对象,并为 testlog.txt 创建一个 FileInfo 对象。

每个对象都会沿着管道发送到压缩存档DestinationPath 指定存档文件的位置。未指定 Path 参数,因为管道对象被接收到参数位置 0。

以下摘要描述了包含重复文件的 PipelineRecurse.zip 存档的内容:

  • DirectoryInfo 对象创建 testsub 目录并包含 testlog.txt 文件,该文件反映了原始目录结构。
  • FileInfo 对象在存档的根目录中创建重复的 testlog.txt。创建重复文件是因为递归将文件对象发送到压缩存档。此行为是预期的,因为沿着管道发送的每个对象都会添加到存档中。

示例 9:更新现有存档文件

此示例更新 C:\Archives 目录中的现有存档文件 Draft.zip。在此示例中,现有存档文件包含根目录及其文件和子目录。

Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip

该命令使用 C:\Reference 目录及其子目录中现有文件的新版本更新 Draft.zip。而且,添加到 C:\Reference 或其子目录的新文件包含在更新的 Draft.zip 存档中。

参数

-CompressionLevel

指定创建存档文件时要应用的压缩程度。更快的压缩需要更少的时间来创建文件,但可能会导致文件大小更大。

如果未指定此参数,该命令将使用默认值最佳

以下是该参数可接受的值:

  • 最快。使用可用的最快压缩方法来减少处理时间。更快的压缩会导致更大的文件大小。
  • 无压缩。不压缩源文件。
  • 最佳。处理时间取决于文件大小。
类型 :

String

接受的值:

最佳、无压缩、最快

位置:

命名

默认值:

最佳的

必需的:

False

接受管道输入:

False

接受通配符:

False

-Confirm

在运行 cmdlet 之前提示您进行确认。

类型 :

SwitchParameter

别名:

cf

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-DestinationPath

该参数是必需的,指定存档输出文件的路径。 DestinationPath 应包含压缩文件的名称以及压缩文件的绝对或相对路径。

如果 DestinationPath 中的文件名没有 .zip 文件扩展名,cmdlet 将添加 .zip 文件扩展名。

类型 :

String

位置:

1

默认值:

None

必需的:

True

接受管道输入:

False

接受通配符:

False

-Force

使用此参数覆盖现有存档文件。

类型 :

SwitchParameter

位置:

命名

默认值:

False

必需的:

True

接受管道输入:

False

接受通配符:

False

-LiteralPath

指定要添加到存档压缩文件中的文件的一个或多个路径。与 Path 参数不同,LiteralPath 的值完全按照键入的方式使用。没有字符被解释为通配符。如果路径包含转义字符,请将每个转义字符括在单引号中,以指示 PowerShell 不要将任何字符解释为转义序列。要指定多个路径,并在输出压缩文件中包含多个位置的文件,请使用逗号分隔路径。

类型 :

String[]

别名:

PSPath

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-PassThru

使 cmdlet 输出表示所创建的存档文件的文件对象。

此参数是在 PowerShell 6.0 中引入的。

类型 :

SwitchParameter

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-Path

指定要添加到存档压缩文件中的文件的一个或多个路径。要指定多个路径并在多个位置包含文件,请使用逗号分隔路径。

该参数接受通配符。通配符允许您将目录中的所有文件添加到存档文件中。

对根目录使用通配符会影响存档的内容:

  • 要创建包括根目录及其所有文件和子目录的存档,请在路径中指定不带通配符的根目录。例如:-路径 C:\Reference
  • 要创建排除根目录但压缩其所有文件和子目录的存档,请使用星号 (*) 通配符。例如:-路径 C:\Reference\*
  • 要创建仅压缩根目录中文件的存档,请使用星-点-星 (*.*) 通配符。根目录的子目录不包含在存档中。例如:-路径 C:\Reference\*.*
类型 :

String[]

位置:

0

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

True

-Update

通过用具有相同名称的较新文件版本替换存档中的旧文件版本来更新指定存档。您还可以添加此参数以将文件添加到现有存档中。

类型 :

SwitchParameter

位置:

命名

默认值:

False

必需的:

True

接受管道输入:

False

接受通配符:

False

-WhatIf

显示 cmdlet 运行时会发生什么情况。该 cmdlet 未运行。

类型 :

SwitchParameter

别名:

wi

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

输入

字符串

您可以通过管道传输包含一个或多个文件路径的字符串。

输出

默认情况下,此 cmdlet 不返回任何输出。

文件信息

当您使用 PassThru 参数时,此 cmdlet 将返回 FileInfo 对象。

笔记

使用递归并沿着管道发送对象可以复制存档中的文件。例如,如果您将 Get-ChildItemRecurse 参数一起使用,则发送的每个 FileInfoDirectoryInfo 对象管道已添加到存档中。

Compress-Archive cmdlet 使用 UTF-8 编码。其他 ZIP 存档工具可能使用不同的编码方案。当提取文件名未使用 UTF-8 编码存储的文件时,Expand-Archive 使用在存档中找到的原始值。这可能会导致文件名与存档中存储的源文件名不同。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯