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 (文字列)

fileName 内の任意のパスをオーバーライドするために使用するディレクトリ パスを指定します。このパスは、現在のファイルシステムの実際のディレクトリに対応している場合と、対応していない場合があります。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 に答える