[英]Copy folders without files, files without folders, or everything using PowerShell
[英]Zip multiple folders and files using powershell 2
我有以下文件夹、子文件夹和文件的结构 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 中使用 DotNetZip 库做到这一点。
您可以在此处找到您需要的所有文档/下载:
https://archive.codeplex.com/?p=dotnetzip
要将其实现到 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 很快就会被撤下,我讨厌点击一个已关闭的链接,所以如果将来有人正在寻找这个库,你可以在这里找到它:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.