使用 powershell 2 压缩多个文件夹和文件

Posted

技术标签:

【中文标题】使用 powershell 2 压缩多个文件夹和文件【英文标题】:Zip multiple folders and files using powershell 2 【发布时间】:2018-09-30 07:19:05 【问题描述】:

我在每个文件夹、子文件夹和文件中都有以下结构 C:\产品\文件夹名称1 C:\产品\文件夹名称1XX C:\产品\文件夹名称1YY C:\Prod\FolderName1ZZ

我希望将所有 Foldername1 文件夹及其子文件夹和文件压缩到一个 zip 文件中。

以下内容适用于 powershell 5.0

$name = Read-Host 'enter the folder NAME'
$namexx = $name + 'xx'
$nameyy = $name + 'yy'
$namezz = $name + 'zz'

$fullpath = join-path -path 'C:\Prod\' -childpath $name
$fullpathxx = join-path -path 'C:\Prod\' -childpath $namexx
$fullpathyy = join-path -path 'C:\Prod\' -childpath $nameyy
$fullpathzz = join-path -path 'C:\Prod\' -childpath $namezz

Compress-Archive -LiteralPath $fullpath,$fullpathxx,$fullpathyy,$fullpathzz -CompressionLevel Optimal -DestinationPath "C:\Dev\$blue $(get-date -f yyyy-MM-dd).zip"

不幸的是,在必须发生这种情况的服务器上,Powershell 是 2.0 版,并且没有 Compress-Archive cmdlet。

我试过了

Add-Type -Assembly "System.IO.Compression.FileSystem" ;
[System.IO.Compression.ZipFile]::CreateFromDirectory("$fullpath", "c:\dev\$name.zip") ; 

但是这种方法会为每个文件夹创建多个 zip 文件。 提前致谢。

【问题讨论】:

使用命令行压缩工具。 我在这里没有看到任何问题,除非这是一个隐含的“有人会为我写 PS v2 的 Compress-Archive 吗?”,我会说这太宽泛了。将服务器升级到 PowerShell 5。使用具有 PS 5 和文件共享的远程计算机来获取文件。使用7-zip。 这个问题是一个解释问题。你可能会问“有人会为我写 PS v2 的 Compress-Archive 吗?”对于其他将是“如何将多个文件夹压缩成一个压缩文件?”用 powershell 5 升级 200 台服务器并不是一个非常可行的解决方案,除非你是在开玩笑。 【参考方案1】:

我可以在 2.0 中使用 DotNetZip 库做到这一点。

您可以在此处找到所需的所有文档/下载: https://archive.codeplex.com/?p=dotnetzip

https://www.nuget.org/packages/DotNetZip/

https://github.com/haf/DotNetZip.Semverd

要将其实现到 PS 脚本中,您需要执行以下操作:

[System.Reflection.Assembly]::LoadFrom("your \ path \ to \ the \ dll \ file") 

#To zip a file, do this: 
$zipObj = New-Object Ionic.Zip.Zipfile
$zipObj.AddFile($fileName, "file")
$zipObj.Save($saveFileName)
$zipObj.Dispose()

#To zip a directory, do this:
$zipObj = New-Object Ionic.Zip.Zipfile
$zipObj.AddDirectory($directoryName,"dir")
$zipObj.Save($saveDirectoryName)
$zipObj.Dispose()

希望这会有所帮助!我知道不得不依赖另一个工具会很痛苦 - 但这个 dll 确实创造了奇迹(即使 Powershell 4 能够自行压缩,我们也会继续使用它)。

这里还有另一个很好的例子(加密): https://documentation.help/DotNetZip/Powershell.htm

编辑:Codeplex 即将被删除,我讨厌点击已关闭的链接,所以如果将来有人在寻找这个库,你可以在这里找到它:

https://www.nuget.org/packages/DotNetZip/

https://github.com/haf/DotNetZip.Semverd

【讨论】:

以上是关于使用 powershell 2 压缩多个文件夹和文件的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Powershell 2.0 压缩文件

如何使用 Powershell Compress-Archive 仅压缩文件夹中的 pdf?

Azure devops powershell 任务问题

在不压缩的 Powershell 上使用 7zip

使用 powershell 压缩旧文件

使用 7zip 压缩 powershell 5.0