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ファイルに追加することはできません。2つの選択肢があります。

  1. スクリプトと同じように、フラットな構造で単一のファイルを追加します
  2. 1つのフォルダーとそのすべてのコンテンツを追加します(これにより、親フォルダーとして追加されたフォルダーを使用して構造フォルダーが保存されます)。
$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)

あなたの質問に対する私のコメントのように、DotNetZip(IMO)のようにプログラムでzipファイルを作成するためのより安全な方法を使用することをお勧めします。

于 2012-06-05T10:05:18.270 に答える
-3

CSharpZipLibを使用することになりました。思った通りに動作しました。

みんな、ありがとう。

于 2012-07-02T19:19:28.147 に答える