从PowerShell“捆绑”一个文件夹(例如,创建一个未压缩的zip)

时间:2011-03-21 21:09:57

标签: powershell

我正在使用PowerShell对上一天修改的所有文件进行夜间备份。

目标是创建一个未压缩的 zip(或任何其他格式),使用PowerShell将备份文件夹中的所有内容分组到一个文件中。

以下代码适用于压缩,但速度太慢:

function Add-Zip
{
    param([string]$zipfilename)

    if(-not (test-path($zipfilename)))
    {
        set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
        (dir $zipfilename).IsReadOnly = $false  
    }

    $shellApplication = new-object -com shell.application
    $zipPackage = $shellApplication.NameSpace($zipfilename)

    foreach($file in $input) 
    { 
        $zipPackage.CopyHere($file.FullName)
        Start-sleep -milliseconds 1000
        #500 milliseconds was too short.... 
    }
}

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

我建议将powershell与7-Zip命令行结合使用。 7-Zip有command line option,允许无压缩。

-mx0

答案 1 :(得分:4)

PowerShell Community Extensions有一个Write-Tar cmdlet,可能会在这里使用。

答案 2 :(得分:0)

借鉴Eld's answeranother question,我想出了:

function ZipFiles( $zipfilename, $sourcedir )
{
   [Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem")
   $compressionLevel = [System.IO.Compression.CompressionLevel]::NoCompression
   [System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir,
        $zipfilename, $compressionLevel, $false)
}

Eld还谈到了他的解决方案,这也适用于此:

  

与Powershell 3和.NET 4.5一起使用的纯Powershell替代方案(如果可以使用的话):

他回答的更改是为该级别指定NoCompression而不是Optimal