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在函数的开头添加一个.