将文件夹添加到zip

时间:2018-03-27 05:30:06

标签: powershell zip directory

我遇到了如何将文件夹添加到现有ZIP文件的问题。

这个zip文件也是由PowerShell创建的。

我只能使用Powershell 5提供的系统类。我不能使用任何用户包或插件(包括7zip)。

这是我的代码:

function addFileToArchiveTest ($filePathToAdd, $archivePathToUpdate) {
    if ([System.IO.File]::Exists($filePathToAdd) -or (Test-Path $filePathToAdd)) {
        $file = [System.IO.Path]::GetFileName($filePathToAdd);
        Write-Host $filePathToAdd.Name;
        Write-Host $filePathToAdd;
        Write-Host $archivePathToUpdate;
        $archive = [System.IO.Compression.ZipFile]::Open($archivePathToUpdate, [System.IO.Compression.ZipArchiveMode]::Update);
        $compressionLevel = [System.IO.Compression.CompressionLevel]::NoCompression;
        [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($archive, $filePathToAdd, $file, "$compressionLevel");
        $archive.Dispose();
    } else {
        Write-Host "[ERROR@function] <AddFileToArchive>: <filePathToAdd> does not exist!";
        Write-Host "[ERROR@function] <Variable<filePathToAdd>>: $filePathToAdd";
        Write-Host "[ERROR@function] <Variable<archivePathToUpdate>>: $archivePathToUpdate";
    }
}

我正在考虑变量$file - 可能存在问题,因为文件夹没有扩展名。

我像这样运行脚本:

PS> addFileToArchiveTest "C:\TestFolder\FolderToArchive" "C:\TestFolder\thereIsAlreadyZipFile.zip"

返回错误:

Exception calling "CreateEntryFromFile" with "4" argument(s): "Access to the
path 'C:\TestFolder\FolderToArchive' is denied."
At C:\Users\user\Desktop\testfolder.ps1:196 char:13
+             [System.IO.Compression.ZipFileExtensions]::CreateEntryFro ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : UnauthorizedAccessException

注意我也尝试允许脚本,我正在启动管理员权限。

2 个答案:

答案 0 :(得分:0)

也许令人惊讶的是,CreateEntryFromFile()用于添加文件,而非文件夹。您需要单独添加每个文件:

Get-ChildItem $filePathToAdd | ForEach-Object {
    [IO.Compression.ZipFileExtensions]::CreateEntryFromFile($archive, $_.FullName, $_.Name, "$compressionLevel")
}

答案 1 :(得分:0)

用户@guiwhatsthat回答:PowerShell 5确实支持Compress-Archive。它完全符合您的要求。

这是我想要的。