41111111111Rating 4.00 (1 Vote)

Предположим есть каталог содержащий больше количество zip файлов, необходимо распаковать их в отдельный каталог. Допустим исходный каталог, который содержит архивы расположен здесь:

C:\test\arcs

Распаковать необходимо в:

C:\test\un

Для выполнения этой задачи поможет вот такой вот скрипт:

$arcs = Get-childitem -recurse "C:\test\arcs" -include *.zip
$shell = new-object -com shell.application

foreach($file in $arcs)
{
    $zip = $shell.NameSpace($file.FullName)
    foreach($item in $zip.items())
    {
        $shell.Namespace("C:\test\un").copyhere($item)
    }
    # Remove archives
    # Remove-Item $file
}

Если необходимо удалить исходные архивы, то достаточно раскомментировать строку # Remove-Item $file.

Пока писал статью, попутно нашел решение, немного красивее:

PARAM (
    [string] $ZipFilesPath = "C:\test\arcs",
    [string] $UnzipPath = "C:\test\un"
)
 
$Shell = New-Object -com Shell.Application
$Location = $Shell.NameSpace($UnzipPath)
 
$ZipFiles = Get-Childitem $ZipFilesPath -Recurse -Include *.ZIP
 
$progress = 1
foreach ($ZipFile in $ZipFiles) {
    Write-Progress -Activity "Unzipping to $($UnzipPath)" -PercentComplete (($progress / ($ZipFiles.Count + 1)) * 100) -CurrentOperation $ZipFile.FullName -Status "File $($Progress) of $($ZipFiles.Count)"
    $ZipFolder = $Shell.NameSpace($ZipFile.fullname)
 
 
    $Location.Copyhere($ZipFolder.items(), 1040) # 1040 - No msgboxes to the user - http://msdn.microsoft.com/en-us/library/bb787866%28VS.85%29.aspx
    $progress++
}

Исходная статья решения

Добавить комментарий


Защитный код
Обновить

Сейчас 311 гостей и ни одного зарегистрированного пользователя на сайте

Вверх
Вниз