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

使用powershell将zip文件解压缩到多个文件夹中,powershell,Powershell,我有5个压缩文件和5个文件夹分别。 文件有:FranceData.zip、USAdata.zip、germanadata.zip、Italydata.zip和DanemarkData.zip。文件夹包括:FranceFolder、USAFolder、GermanFolder、ItalyFolder和DanemarkFolder。我想知道如何使用Powershell中的数组将这些文件解压缩到各自的文件夹中。我知道我需要帮助。谢谢这可以使用PowerShell 5及更高版本中提供的扩展存档cmdle

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

这可以使用PowerShell 5及更高版本中提供的
扩展存档
cmdlet来完成。(可以通过
$PSVersionTable
变量检查PowerShell的版本。)

要将zip文件解压缩到特定文件夹,请使用以下语法:

Expand-Archive -Path '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
s的集合),如下所示:

$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,因此无需任何系统更改即可运行。
该模块可在以下位置找到:

所使用的语法相同,函数为
扩展存档
,参数为
-Path
-LiteralPath
,和
-DestinationPath

只需确保在使用模块之前已导入该模块,即可使用
Import-module
cmdlet执行此操作,如下所示:

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

PowerShell 2


可以在此处找到PowerShell 2的解决方案:

这可以使用PowerShell 5及更高版本中提供的
扩展存档
cmdlet来完成。(可以通过
$PSVersionTable
变量检查PowerShell的版本。)

要将zip文件解压缩到特定文件夹,请使用以下语法:

Expand-Archive -Path '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
s的集合),如下所示:

$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,因此无需任何系统更改即可运行。
该模块可在以下位置找到:

所使用的语法相同,函数为
扩展存档
,参数为
-Path
-LiteralPath
,和
-DestinationPath

只需确保在使用模块之前已导入该模块,即可使用
Import-module
cmdlet执行此操作,如下所示:

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

PowerShell 2


PowerShell 2的解决方案可在此处找到:

非常感谢。我将尝试最后一个例子,这是我正在寻找和得到你。再次感谢。我真的很感激。我检查了版本,我有版本4.0。你认为它能在4.0上运行吗?如果没有,请告诉我如何在4.0版中使用。谢谢,我尝试了代码,但Expand archive在4.0版中不是一个可识别的CMDLET。我给出了5个文件和5个文件夹作为示例,但事实上,我每天都会收到40个zip文件,这些文件需要解压缩到他们的文件夹中。您给我的示例在PS5中运行良好,但我有PS4版本,无法升级到PS5,因为我没有这样做的权限。请你帮我一下好吗。谢谢你,非常感谢你,哈利。我会试试的,很快会告诉你的。非常感谢。我将尝试最后一个例子,这是我正在寻找和得到你。再次感谢。我真的很感激。我检查了版本,我有版本4.0。你认为它能在4.0上运行吗?如果没有,请告诉我如何在4.0版中使用。谢谢,我尝试了代码,但Expand archive在4.0版中不是一个可识别的CMDLET。我给出了5个文件和5个文件夹作为示例,但事实上,我每天都会收到40个zip文件,这些文件需要解压缩到他们的文件夹中。您给我的示例在PS5中运行良好,但我有PS4版本,无法升级到PS5,因为我没有这样做的权限。请你帮我一下好吗。谢谢你,非常感谢你,哈利。我会试试的,很快会告诉你的。