2012-06-04 106 views
3

我正在使用以下函數將文件添加到.zip壓縮文件,該文件工作正常,但我需要能夠將父目錄一些文件。有任何想法嗎?PowerShell-將文件添加到.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 
    } 
} 
+0

如何使用http://dotnetzip.codeplex.com/? –

+0

我寧願修改現有的代碼,因爲它已經被綁定到當前的項目中。 – tjernigan

回答

-2

使用CSharpZipLib結束。按照我的希望工作。

謝謝大家。

+3

我認爲這是不正確的不接受一個答案接受你的答案根本不是你的問題... –

2

根據我的知識,你不能添加到壓縮文件使用shell.application和保存的文件夾結構中的一個特定的文件。 你有兩個選擇:

  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)。

+0

對不起,但我有一些問題,試圖給出更好的格式來代碼可能的答案。我不知道爲什麼.... –

+0

我至少把你的代碼放到代碼塊中。我不知道在Markdown中是否有縮進代碼塊的方法。 – Shibumi

相關問題