首页 文章

PowerShell v4 - 存档和提取新的和现有的Zip文件

提问于
浏览
1

我的目标是创建PowerShell脚本,它将:

  • 提取目录中的多个zip文件

  • 为多种文件类型创建存档zip文件,并且能够将文件添加到zip(如果已存在) .

我无法在PowerShell v4中使用 Compress-Archive / Expand-Archive

这提取test.zip但是我需要它使用通配符一次提取多个.zip文件:

[System.IO.Compression.ZipFile]::ExtractToDirectory('C:\test.zip', 'C:\')

这将在 "C:\$year\$month\$folder.zip" 目录中创建zip文件 . 当我使用新的'sample'文件再次运行相同的脚本时,它表示它已经存在 .

我需要修改脚本来说'如果zip文件存在,请将文件添加到它' .

$year = Get-Date -Format 'Yr. yyyy'
$month = Get-Date -Format 'MMMM'
$folder = Get-Date -Format 'TESTddMMyyyy'
$source = "C:\$year\$month\$folder"
$destination = "C:\$year\$month\$folder.zip"
New-Item -ItemType Directory -Path "C:\$year\$month\$(Get-Date -Format 'TESTddMMyyyy')"
Move-Item 'C:\SAMPLE*' "C:\$year\$month\$(Get-Date -Format 'TESTddMMyyyy')"
Add-Type -assembly "system.io.compression.filesystem"
[system.io.compression.zipfile]::CreateFromDirectory($source, $destination)
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
Remove-Item $source -Force -Recurse

1 回答

  • 0
    if (Test-Path $destination)
    {
       [System.IO.Compression.ZipArchive]$ZipFile = [System.IO.Compression.ZipFile]::Open($destination, ([System.IO.Compression.ZipArchiveMode]::Update))
       [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($ZipFile, $source, (Split-Path $source -Leaf))
       $ZipFile.Dispose()
    }
    else
    {
       [system.io.compression.zipfile]::CreateFromDirectory($source, $destination)
       $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
    }
    Remove-Item $source -Force -Recurse
    

相关问题