17

我正在尝试使用 DotNetZip 和 powershell 压缩日志。这些文件位于 C:\user\temp\logs 当我遍历目录中的日志并将它们添加到 zip 文件中时,当我只想要日志文件时,我最终得到了文件夹层次结构和日志文件。

所以 zip 最终包含:

-user
  └temp  
    └logs
       └log1.log
        log2.log
        log3.log

当我希望 zip 文件包含时:

log1.log
log2.log
log3.log

这是我正在运行以测试的脚本:

[System.Reflection.Assembly]::LoadFrom("c:\\\User\\bin\\Ionic.Zip.dll");
$zipfile = new-object Ionic.Zip.ZipFile("C:\user\temp\logs\TestZIP.zip");

$directory = "C:\user\temp\logs\"
$children = get-childitem -path $directory
foreach ($o in $children)
{
   if($o.Name.EndsWith(".log")){
      $e = $zipfile.AddFile($o.FullName)
   }
}
$zipfile.Save()
$zipfile.Dispose()
4

2 回答 2

22

有一个AddFile,您可以在其中覆盖存档中的文件名:

public ZipEntry AddFile(
    string fileName,
    string directoryPathInArchive
)

文件名(字符串

要添加的文件的名称。文件名可以是相对路径或完全限定路径。

directoryPathInArchive (字符串)

指定用于覆盖文件名中的任何路径的目录路径。此路径可能对应于当前文件系统中的真实目录,也可能不对应。如果稍后解压缩 zip 中的文件,则这是用于解压缩文件的路径。传递 null(VB 中为 Nothing)将使用 fileName 上的路径(如果有)。 传递空字符串 ("") 将在存档的根路径中插入项目。

试试这个:

 $e = $zipfile.AddFile($o.FullName, $o.Name)

这也可能是您想要的:

 $e = $zipfile.AddFile($o.FullName, "")
于 2011-06-01T13:57:47.093 回答
1

未经测试,但我认为这应该有效。

[System.Reflection.Assembly]::LoadFrom("c:\\\User\\bin\\Ionic.Zip.dll");
$zipfile = new-object Ionic.Zip.ZipFile("C:\user\temp\logs\TestZIP.zip");

    $directory = "C:\user\temp\logs\"
    set-location $directory
    $children = get-childitem *.log
    foreach ($o in $children)
    {
        $e = $zipfile.AddFile($o.Name)
       }
    }
    $zipfile.Save()
    $zipfile.Dispose()
于 2011-06-01T14:00:26.573 回答