распакуйте zip-файлы в несколько папок с PowerShell - PullRequest
0 голосов
/ 30 сентября 2018

У меня 5 почтовых файлов и 5 папок соответственно.Файлы: FranceData.zip, USAdata.zip, GermanData.zip, Italydata.zip и DanemarkData.zip.Папки: FranceFolder, USAFolder, GermanFolder, ItalyFolder и DanemarkFolder.Я хотел бы знать, как мне распаковать эти файлы в соответствующие папки, используя Array в Powershell.Я знаком с Пауэршеллом и нуждаюсь в помощи.Спасибо

1 Ответ

0 голосов
/ 30 сентября 2018

Это можно сделать с помощью командлета Expand-Archive, который доступен в PowerShell 5 и выше.(Версию PowerShell можно проверить с помощью переменной $PSVersionTable.)

Для извлечения zip-файла в определенную папку используется следующий синтаксис:

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

или

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

Если используется параметр -Path, PowerShell распознает такие символы, как *, ?, [, ], как символы подстановки, что может вызвать непредвиденное поведение для путей к файлам, содержащих квадрат-brackets.
Если используется параметр -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, вы можете использовать Microsoft.PowerShell.Archive, созданный PowerShellteam.
PowerShell 4 требует .Net Framework 4.5, так что это должно работать без каких-либо системных изменений.
Модуль можно найти по адресу https://github.com/PowerShell/Microsoft.PowerShell.Archive

Используемый синтаксис идентичен, функция Expand-Archive и параметры -Path, -LiteralPath и -DestinationPath.
Просто убедитесь, что вы импортировали модуль перед его использованием, это можно сделать с помощью командлета Import-Module следующим образом:

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

PowerShell 2

Решение для PowerShell 2 можно найти здесь: https://stackoverflow.com/a/37814462/9447234

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...