Powershell用动态名称解压缩文件中的一个特定文件夹

问题描述 投票:0回答:1

我发现了一段几乎可以满足我需要的代码here,它只是从存档文件中提取一个文件夹。

我唯一的问题是档案名称每个月都在变化,因此我想使用通配符。一旦指定了通配符($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)
powershell wildcard unzip
1个回答
1
投票

尝试一下此尺寸。只需使用Get-ChildItem在您的ALL目录中找到该zip文件即可。

[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') | Out-Null

    $zipfile = Get-ChildItem -Path C:\ALL\ -Filter *.zip | Where-Object {$_.Name -like "Debtor*"} | Select-Object -ExpandProperty FullName
    $folder  = 'tmp\st\sd\'
    $dst     = 'C:\ALL\ZipOutput'

    [IO.Compression.ZipFile]::OpenRead($zipfile).Entries | Where-Object {
        $_.FullName -like "$($folder -replace '\\','/')/*.*"
    } | ForEach-Object {
        $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)
    }

我还假设存档名称已更改,但是没有多个具有该名称的存档。如果有,则需要将所有内容包装在Foreach($zip in $zipfile){ ... }

© www.soinside.com 2019 - 2024. All rights reserved.