使用Powershell或命令行在Windows中创建压缩/压缩文件夹

Tec*_*270 23 windows compression powershell command-line

我正在创建一个夜间数据库模式文件,并希望将每晚创建的所有文件(每个数据库一个)放入一个文件夹并压缩该文件夹.我有一个创建数据库的的schema.Only创建脚本,然后将所有的文件到一个新的文件夹中的PowerShell脚本.问题在于该过程的压缩部分.

有没有人知道是否可以使用预先安装的处理文件夹压缩的Windows实用程序来完成此操作?

如果可能的话,最好使用该实用程序,而不是像7zip这样的东西(我不想在每个客户的服务器上安装7zip,如果我问他们可能需要IT年数才能完成).

son*_*njz 23

采用最新.NET 4.5框架的本机方式,但完全没有功能:

创建:

Add-Type -Assembly "System.IO.Compression.FileSystem" ;
[System.IO.Compression.ZipFile]::CreateFromDirectory("c:\your\directory\to\compress", "yourfile.zip") ;
Run Code Online (Sandbox Code Playgroud)

萃取:

Add-Type -Assembly "System.IO.Compression.FileSystem" ;
[System.IO.Compression.ZipFile]::ExtractToDirectory("yourfile.zip", "c:\your\destination") ;
Run Code Online (Sandbox Code Playgroud)

如上所述,完全没有功能,所以不要指望覆盖标志.


voi*_*hos 20

这里有几个不依赖于扩展的与zip相关的函数:使用Windows 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 500
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

dir c:\demo\files\*.* -Recurse | Add-Zip c:\demo\myzip.zip
Run Code Online (Sandbox Code Playgroud)

有一点需要注意:如果路径不是绝对路径,则shell.application对象的NameSpace()功能无法打开zip文件进行写入.因此,如果您传递了相对路径Add-Zip,它将以null错误失败,因此zip文件的路径必须是绝对路径.

或者你可以$zipfilename = resolve-path $zipfilename在函数的开头添加一个.


Ove*_*ive 7

从PowersShell 5开始,有一个Compress-Archive cmdlet可以完成开箱即用的任务.