【问题标题】:unzip zip files into multiple folders with powershell使用 powershell 将 zip 文件解压缩到多个文件夹中
【发布时间】:2018-10-02 00:52:25
【问题描述】:

我分别有 5 个 zip 文件和 5 个文件夹。 文件有:FranceData.zip、USAdata.zip、GermanData.zip、Italydata.zip 和 DanemarkData.zip。文件夹有:FranceFolder、USAFolder、GermanFolder、ItalyFolder 和 DanemarkFolder。我想知道如何使用 Powershell 中的 Array 将这些文件解压缩到它们各自的文件夹中。我知道 Powershell 并且需要帮助。谢谢

【问题讨论】:

    标签: powershell


    【解决方案1】:

    这可以使用Expand-Archive cmdlet 来完成,它在 PowerShell 5 及更高版本中可用。 (可以通过 $PSVersionTable 变量检查 PowerShell 的版本。)

    要将 zip 文件提取到特定文件夹,请使用以下语法:

    Expand-Archive -Path 'ZipFile.zip' -DestinationPath 'ZipFolder'
    

    Expand-Archive -LiteralPath 'ZipFile.zip' -DestinationPath 'ZipFolder'
    

    如果使用-Path 参数,PowerShell 会将诸如*?[] 等字符识别为通配符,这可能会导致包含 square- 的文件路径出现意外行为括号。
    如果使用-LiteralPath 参数,PowerShell 不会将任何字符视为通配符。


    假设您所有的 zip 文件和文件夹都遵循相同的命名模式,您可以使用这样的数组:

    $Countries = @(
        'France',
        'USA',
        'German'
        'Italy',
        'Danemark'
    )
    
    foreach ($Country in $Countries)
    {
        $ZipFilePath = $Country + 'Data.zip'
        $DestinationPath = $Country + 'Folder'
    
        Expand-Archive -LiteralPath $ZipFilePath -DestinationPath $DestinationPath
    }
    

    如果您的文件和文件夹不遵循相同的命名模式,您可以使用字典(或 KeyValuePairs 的集合),如下所示:

    $ZipFilesAndFolders = @{
        'FranceData.zip' = 'FranceFolder'
        'USAData.zip' = 'USAFolder'
        'GermanData.zip' = 'GermanFolder'
        'ItalyData.zip' = 'ItalyFolder'
        'DanemarkData.zip' = 'DanemarkFolder'
    }
    
    foreach ($KeyAndValue in $ZipFilesAndFolders.GetEnumerator())
    {
        $ZipFilePath = $KeyAndValue.Key
        $DestinationPath = $KeyAndValue.Value
    
        Expand-Archive -LiteralPath $ZipFilePath -DestinationPath $DestinationPath
    }
    

    使用 PowerShell 4(和 3)

    如果您安装了 .Net Framework 4.5,则可以使用由 PowerShell 团队创建的Microsoft.PowerShell.Archive
    PowerShell 4 需要 .Net Framework 4.5,因此无需任何系统更改即可工作。
    该模块可以在https://github.com/PowerShell/Microsoft.PowerShell.Archive找到。

    使用的语法相同,函数为Expand-Archive,参数为-Path-LiteralPath-DestinationPath
    只需确保在使用之前已导入模块,这可以使用 Import-Module cmdlet 来完成,如下所示:

    Import-Module -Name 'Microsoft.PowerShell.Archive' -Force
    

    PowerShell 2

    可以在此处找到 PowerShell 2 的解决方案:https://stackoverflow.com/a/37814462/9447234

    【讨论】:

    • 非常感谢。我将尝试最后一个示例,这是我正在寻找的并会回复您。再次感谢。我真的很感激。
    • 我检查了版本,我有 4.0 版。你认为它会在 4.0 上运行吗?如果不能,请告诉我如何在 4.0 版中。谢谢
    • 我尝试了代码,但 Expand-archive 不是 4.0 版中的识别 CMDLET。
    • 我已经给出了 5 个文件和 5 个文件夹作为示例,但实际上我每天会收到 40 个 zip 文件,这些文件需要提取到他们的文件夹中。您给我的示例在 PS5 中运行良好,但我有 PS4 版本,我无法升级到 PS5,因为我没有这样做的权限。请你帮帮我。谢谢
    • 非常感谢哈利。我会试试看,很快就会告诉你。
    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2018-09-30
    相关资源
    最近更新 更多