Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 使用powershell 2压缩多个文件夹和文件_File_Powershell_Zip_Directory - Fatal编程技术网

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

File 使用powershell 2压缩多个文件夹和文件,file,powershell,zip,directory,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 +

我的文件夹、子文件夹和文件结构如下: 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文件。
提前感谢。

我能够在2.0中使用DotNotZip库完成这项工作

您可以在此处找到所需的所有文档/下载:

要将其实现为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能够自行压缩)

这里还有另一个很好的例子(使用加密):


我可以在2.0中使用DotNotZip库来实现这一点

您可以在此处找到所需的所有文档/下载:

要将其实现为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能够自行压缩)

这里还有另一个很好的例子(使用加密):


使用命令行压缩工具。我在这里看不到问题,除非它是一个隐含的“有人会为我为PS v2编写压缩存档吗?”,我认为这太宽泛了。将服务器升级到PowerShell 5。使用带PS 5和文件共享的远程计算机访问文件。这个问题是一个解释的问题。对于你来说,可能是“有人为我为PS v2编写压缩存档吗?”对于其他人来说,可能是“如何将多个文件夹压缩到一个压缩文件?”使用powershell 5升级200台服务器不是一个非常可行的解决方案,除非你开玩笑。使用命令行压缩工具。我在这里没有看到问题,除非这是一个隐含的问题“是否有人为我为PS v2编写压缩存档?”,我认为这太广泛了。请将服务器升级到PowerShell 5。使用带有PS 5和文件共享的远程计算机访问文件。使用。问题是解释问题。对于其他人,您可能会问“是否有人为我为PS v2编写压缩存档?”如何将多个文件夹压缩到一个zip文件中?“使用powershell 5升级200台服务器不是一个非常可行的解决方案,除非你是在开玩笑。