4

我正在使用以下函数将文件添加到工作正常的 .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
     }
}
4

2 回答 2

2

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

  1. 像脚本一样在平面结构中添加单个文件
  2. 添加一个文件夹及其所有内容(这将使用添加为父文件夹的文件夹保存结构文件夹):
$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 (IMO) 那样。

于 2012-06-05T10:05:18.270 回答
-3

最终使用 CSharpZipLib。像我希望的那样工作。

感谢大家。

于 2012-07-02T19:19:28.147 回答