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