在powershell中压缩文件夹

在powershell中压缩文件夹,powershell,zip,Powershell,Zip,希望其他编剧能帮上忙:几个小时来我一直在为这个问题绞尽脑汁 我正在尝试使用powershell压缩某些文件夹。 我的文件夹结构是 备份 BoxIntranet 组件 所容纳之物 数据库 执行官 文件夹 日志 多浏览器 多浏览器\传统\定制 包装 父门户 父门户\自定义 学生门户 学生门户\定制 使现代化 WebDav 上面的每一个文件和文件夹都有很多,但这些是我最感兴趣的。 我试图在PowerShell中使用Write-zip或Compress-Archive方法来压缩所有内容,但我的条件是 只

希望其他编剧能帮上忙:几个小时来我一直在为这个问题绞尽脑汁

我正在尝试使用powershell压缩某些文件夹。 我的文件夹结构是

备份 BoxIntranet 组件 所容纳之物 数据库 执行官 文件夹 日志 多浏览器 多浏览器\传统\定制 包装 父门户 父门户\自定义 学生门户 学生门户\定制 使现代化 WebDav

上面的每一个文件和文件夹都有很多,但这些是我最感兴趣的。 我试图在PowerShell中使用Write-zip或Compress-Archive方法来压缩所有内容,但我的条件是

只有内容、文件、数据库文件夹应从根目录压缩

还应备份多浏览器\Legacy\Customization、StudentPortal\Customization和ParentPortal\Customization文件夹

zip文件中的文件夹结构应保持不变,这意味着zip文件的根目录应包含内容、文件、数据库、多浏览器、ParentPortal和StudentPortal文件夹。虽然内容、文件和数据库文件夹应具有所有压缩功能,但多浏览器、ParentPortal和StudentPortal文件夹应仅具有指定的子目录和其中的所有文件

代码:

我已经尝试过上面的方法,但它没有做任何事情,但是如果我删除-Include参数,那么它会将所有内容压缩,但不会保留文件夹结构


是否有任何方法可以在powershell中完成我想要的内容?

好的,首先要做的事情,您很难使用-Include参数的原因是,它被设计为只包含您指定的内容。因此,它将查看事物的名称,而不是它们的路径,并对照列表进行检查,如果它与列表中的某个内容匹配,它将包含该项。因为您只列出文件夹名称,所以它只包括那些文件夹,而不包括它们的内容。因此,您不会得到任何文件通过这种方式通过管道传递。要解决这个问题,您需要首先构建文件列表,然后将其通过管道传输到cmdlet来压缩文件

下一个问题是压缩存档不存储路径信息,所以您需要使用Write-Zip。我已经包含了我认为您需要的cmdlet

$FilesAndInclude = @("Content", "Files", "Database", "Multibrowser\Legacy\customisation", 
                     "StudentPortal\customisation", "ParentPortal\customisation", 
                     "BoxIntranet\customisation")
$FilesToExclude = @("connectionstrings.config", "inc_dbconn.asp")
[array]$FilesToZip = Get-ChildItem .\* -Exclude $FilesToExclude -File
$FilesToZip += $FilesAndInclude | ForEach{Get-ChildItem .\$_ -Exclude $FilesToExclude -File}
$FilesToZip | Write-Zip -EntryPathRoot $(Resolve-Path .\|Select -Expand Path) -OutputPath Archive.zip

什么是什么意思?是否有一条或多条错误消息?是否创建了Archive.zip文件?Get ChildItem的输出是否是您期望的文件名和目录名?您是明星。这段代码并不是我想要的,但是它给了我一个很好的起点。这为我完成了工作:
$FilesAndInclude = @("Content", "Files", "Database", "Multibrowser\Legacy\customisation", 
                     "StudentPortal\customisation", "ParentPortal\customisation", 
                     "BoxIntranet\customisation")
$FilesToExclude = @("connectionstrings.config", "inc_dbconn.asp")
[array]$FilesToZip = Get-ChildItem .\* -Exclude $FilesToExclude -File
$FilesToZip += $FilesAndInclude | ForEach{Get-ChildItem .\$_ -Exclude $FilesToExclude -File}
$FilesToZip | Write-Zip -EntryPathRoot $(Resolve-Path .\|Select -Expand Path) -OutputPath Archive.zip