Я нашел фрагмент кода здесь , который почти делает то, что мне нужно, то есть извлекает только одну папку из архивного файла.
Единственная проблема, которую я имею, заключается в том, что имя архива меняется месяц за месяцем, поэтому я хотел использовать подстановочный знак. После того, как подстановочный знак указан (* в $zipfile
), скрипт не работает для меня.
Буду благодарен за любые предложения.
[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') | Out-Null
$zipfile = 'C:\ALL\Debtor*.zip'
$folder = 'tmp\st\sd'
$dst = 'C:\ALL\ZipOutput'
[IO.Compression.ZipFile]::OpenRead($zipfile).Entries | ? {
$_.FullName -like "$($folder -replace '\\','/')/*.*"
} | % {
$file = Join-Path $dst $_.FullName
$parent = Split-Path -Parent $file
if (-not (Test-Path -LiteralPath $parent)) {
New-Item -Path $parent -Type Directory | Out-Null
}
[IO.Compression.ZipFileExtensions]::ExtractToFile($_, $file, $true)