使用powershell将压缩文件解压缩到多个文件夹

时间:2018-09-30 03:19:44

标签: powershell

我分别有5个zip文件和5个文件夹。 文件为:FranceData.zip,USAdata.zip,GermanData.zip,Italydata.zip和DanemarkData.zip。文件夹为:France文件夹,USA文件夹,German文件夹,Italy文件夹和Danemark文件夹。我想知道如何使用Powershell中的Array将这些文件解压缩到各自的文件夹中。我对Powershell很了解,需要帮助。谢谢

1 个答案:

答案 0 :(得分:2)

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

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

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

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

如果使用-Path参数,PowerShell会将*?[]等字符识别为通配符,这可能导致包含方括号的文件路径的意外行为。
如果使用-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
}

如果文件和文件夹的命名方式不同,则可以使用字典(或KeyValuePair的集合),如下所示:

$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