PowerShell-将文件添加到.zip存档,需要保留目录结构

时间:2012-06-04 14:59:36

标签: powershell zip

我正在使用以下函数将文件添加到.zip存档中工作正常,但我需要能够包含某些文件的父目录。有什么想法吗?

function Add-ZipFile
{
    param([string]$zipfilename,
    [string]$filter)

    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)
    $files = get-childitem -Filter "$filter" -recurse
    foreach($file in $files) 
     { 
        $zipPackage.CopyHere($file.FullName)
        Start-sleep -milliseconds 500
     }
}

2 个答案:

答案 0 :(得分:2)

根据我的知识,您无法使用shell.application将一个特定文件添加到zip文件并保存其文件夹结构。 你有两个选择:

  1. 在脚本执行时以平面结构添加单个文件
  2. 添加一个文件夹及其所有内容(这会保存结构文件夹 使用添加为父文件夹的文件夹):
  3. $Directory = Get-Item .
    
    $ParentDirectory = Get-Item ..
    
    $ZipFileName = $ParentDirectory.FullName  + $Directory.Name + ".zip"
    
    if (test-path $ZipFileName) {
    
        echo "Zip file already exists at $ZipFileName"
    
        return
    
    }
    
    set-content $ZipFileName ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
    
    (dir $ZipFileName).IsReadOnly = $false
    
    $ZipFile = (new-object -com shell.application).NameSpace($ZipFileName)
    
    $ZipFile.CopyHere($Directory.FullName)
    

    我建议,就像我对你的问题的评论一样,使用更安全的方式以编程方式创建zip文件,如DotNetZip do(IMO)。

答案 1 :(得分:-3)

使用CSharpZipLib结束。按照我的希望工作。

谢谢大家。