我遇到了如何将文件夹添加到现有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
注意我也尝试允许脚本,我正在启动管理员权限。
答案 0 :(得分:0)
也许令人惊讶的是,CreateEntryFromFile()
用于添加文件,而非文件夹。您需要单独添加每个文件:
Get-ChildItem $filePathToAdd | ForEach-Object {
[IO.Compression.ZipFileExtensions]::CreateEntryFromFile($archive, $_.FullName, $_.Name, "$compressionLevel")
}
答案 1 :(得分:0)
用户@guiwhatsthat回答:PowerShell 5确实支持Compress-Archive。它完全符合您的要求。
这是我想要的。