0

我想以不同的变量名创建相同对象的副本。我需要的对象是来自 dotnetzip 的存档文件。

以下代码是完整的实现:

   [System.Reflection.Assembly]::LoadFrom($zipFileDirectory + "Ionic.Zip.dll")
    $zipfile = [Ionic.Zip.ZipFile]::Read($zipfilename) 

    foreach ($file in $zipfile)
    {    
        $strSearchItem = [string]$file.FileName
        $strSearchItem = $strSearchItem.TrimEnd("/") 
        $newfile = $file.PSObject.Copy() 

    for ($i = 0; $i -lt $newfile.Count; $i++)
    {

        if ($strSearchItem -like $searchFolderName + "/*")
        {
           $newFile[$i].FileName = $newFile[$i].FileName.Replace($searchFolderName + "/", "")
           $newFile[$i].Extract($fileDestination, [Ionic.Zip.ExtractExistingFileAction]::OverWriteSilently) 

        }

    }
   } 

    $zipfile.Dispose() 

为此,我需要能够将 $file 作为单独的实体从 $zipfile 复制,或者至少保留 $file 的原始默认值(使其只读似乎不可行)。有没有解决这个问题的方法?提前致谢。

4

1 回答 1

2

也许

$newFile = $zipfile.PSObject.Copy()

在回复@bdrc 评论
示例中添加评论到 zip

PS>$zf=[ionic.zip.zipfile]::read("c:\temp\zip\test.zip")
PS>$zf.comment
PS>$zf2=$zf.psobject.copy()
PS>$zf2.comment="TEST COMMENT"
PS>$zf2.save("c:\temp\test2.zip")

使用 7-zip 打开原始文件时,我没有看到评论,我可以在新的 zipfile 中看到它...

于 2013-09-18T07:09:27.493 回答