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

时间:2018-04-19 17:33:05

标签: file powershell zip directory

我在每个文件夹中都有以下文件夹,子文件夹和文件结构 C:\ PROD \ FolderName1 C:\ PROD \ FolderName1XX C:\ PROD \ FolderName1YY 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文件。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我可以使用DotNotZip库在2.0中完成此操作。

  

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

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

public object MockableServerMethod(ServerMethodDelegate method, params 
    object[] parameters)
{
    return Manager.InvokeServerMethod(method, params);
}

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

  

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