Powershell - 将文件夹/文件添加到 zip,同时排除某些文件夹
Posted
技术标签:
【中文标题】Powershell - 将文件夹/文件添加到 zip,同时排除某些文件夹【英文标题】:Powershell - Add folder/files to zip while excluding certain folders 【发布时间】:2016-08-24 17:19:48 【问题描述】:我正在尝试通过 io.compression.zipfile 提供 Get-ChildItem 调用的结果,以创建“E:\Applications_Server_Test”的 zip 文件,不包括两个文件夹“BACKUP”和“BACKUP2”。
但是,Powershell 似乎将其解释为“$items = 目录和文件名字符串”,而不是我想要压缩的目录和文件的递归集合。我可以找到有关使用 Get-ChildItem 排除目录的教程,也可以找到有关如何压缩完整目录或压缩多个目录的教程,但我找不到任何关于使用排除项压缩目录的内容。谁能告诉我哪里出错了?
$source = "E:\Applications_Server_Test"
$destination = "E:\AST_Dump.zip"
$items = Get-ChildItem $source -Recurse | ? $_.fullname -notmatch "\\backup\\?"
Add-Type -assembly "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($items, $destination)
谢谢!
【问题讨论】:
见Zipping only files using powershell 我在这个根“Applications_Server_Test”文件夹中有 6 个目录和 2 个文件。 BACKUP BACKUP2 DIR1 DIR2 DIR3 DIR4 Genericfile.txt Genericfile.dat 我只排除了两个 BACKUP 文件夹,但我仍然想要其他四个文件夹,任何递归文件和文件夹以及两个根级文件。我想用 Powershell 将剩余的文件和文件夹打包成一个 zip 文件。我唯一的选择是将我想要的所有内容符号链接到其他地方并将其打包还是为每个文件夹创建一个 .zip? 【参考方案1】:目前您正在尝试归档对象 $items,而不是文件夹。不幸的是,这行不通。 尝试将备份文件夹移动到同一驱动器(这只会更改驱动器上的记录,不会移动任何数据),然后归档整个“E:\Applications_Server_Test”文件夹并移回备份文件夹。
其他选项是使用ZipArchive.CreateEntry 方法并逐个文件添加到存档中。但这不是那么优雅;)
【讨论】:
我认为可以在新文件夹中为每个所需文件创建符号链接,因此无需实际复制文件。 问题是备份文件夹是应用程序的一部分。他们需要待在同一个地方。我只是想抓取该根目录中的其他文件和文件夹并将它们压缩,同时不理会 BACKUP 和 BACKUP2。 只需在新文件夹中使用符号链接:examples 我很欣赏您的回复,但这似乎更适用于修复 Autosvet 的答案,而不是评估我的问题并提出答案。为 Get-ChildItem 调用创建符号链接而不是使用 formattng 似乎很复杂。是否真的不可能递归循环遍历所有文件和文件夹,除了两个例外并将非例外添加到 zip 文件中? 如果你的操作系统和 PS 版本支持 Compress-Archive(PS 4.0 和 Win 8.1,如果我没记错的话)你可以使用它:$items |ForEach-Object Compress-Archive $_.FullName -DestinationPath $destination
否则需要使用 ZipArchive.CreateEntry 方法创建类似的循环我在答案中提到。以上是关于Powershell - 将文件夹/文件添加到 zip,同时排除某些文件夹的主要内容,如果未能解决你的问题,请参考以下文章
powershell 将设备从txt文件添加到SCCM设备集合。
powershell 将属性添加到所有文件中的所有连接字符串
powershell 将Service Fabric排除文件和路径添加到Windows Defender