首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Compress-Archive Powershell命令中排除子目录

从Compress-Archive Powershell命令中排除子目录
EN

Stack Overflow用户
提问于 2019-01-22 07:58:14
回答 2查看 1.7K关注 0票数 0

如果这个问题看起来很奇怪,我提前道歉,这是我第一次尝试使用powershell来做这样的事情。

我有一个类似于下面的目录结构:

代码语言:javascript
运行
复制
DIR1/
    bin/
    obj/
    d1-file1
    d1-file2 
DIR2/
    bin/
    obj/
    d2-file1
    d2-file2
DIR3/
    bin/
    obj/
    d3-file1
    d3-file2

我正在尝试用一组顶层和子层排除来压缩这个目录列表。例如,我想排除一个特定的顶级目录(例如,DIR2),同时也从最终结果集中排除特定子目录(例如,bin,obj)。

我尝试了几种不同的方法,但不幸的是,当我遍历子目录时,compress-archive命令将压缩下级项目,而不保留顶层目录结构。我希望保留归档文件中的顶级目录结构,同时排除指定的子目录。

代码语言:javascript
运行
复制
$entries = New-Object System.Collections.Generic.List[System.Object] 

# Get initial directory listing
$dirlist = Get-ChildItem $solutionFileLocation -ad -Exclude "DIR2" | ForEach-Object { $_.FullName }

# Exclude bin and obj directories and add entry path to our zip entry list
foreach ($dir in $dirlist)
{
    $sub = Get-ChildItem $dir -Exclude "bin", "obj" | ForEach-Object { $_.FullName }

    foreach ($itm in $sub)
    {
        $entries.Add($itm)
    }
}

Compress-Archive -LiteralPath $entries -CompressionLevel Optimal -DestinationPath "C:\Filename01212019.zip"

结果是一个包含以下内容的存档:

代码语言:javascript
运行
复制
d1-file1
d1-file2
d3-file1
d3-file2

而不是期望的结果:

代码语言:javascript
运行
复制
DIR1/
    d1-file1
    d1-file2 
DIR3/
    d3-file1
    d3-file2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-22 11:38:37

这里有一个可能的选择(我的意思是我的评论)

代码语言:javascript
运行
复制
$entries = New-Object System.Collections.Generic.List[System.Object] 

$exclude = "DIR2,DIR6"

# Get initial directory listing
$dirlist = Get-ChildItem $solutionFileLocation -ad -Exclude "$exclude" | ForEach-Object { $_.FullName }

# Exclude bin and obj directories and add entry path to our zip entry list
foreach ($dir in $dirlist)
{
    $sub = Get-ChildItem $dir -Exclude "bin", "obj" | ForEach-Object { $_.FullName }

    $entries.Add("$($dir.split('/')[-1])/")
    foreach ($itm in $sub)
    {
        $entries.Add($itm)
    }
}

Compress-Archive -LiteralPath $entries -CompressionLevel Optimal -DestinationPath "C:\Filename01212019.zip"

如果你想让我再改进一下,请告诉我。我觉得有一种更简单的方法。

票数 1
EN

Stack Overflow用户

发布于 2020-03-07 00:09:17

代码语言:javascript
运行
复制
$exclude = $settings.appFolderName

$folders = get-ChildItem -Path $settings.sourceFolderPath | Where-Object {$_.name -notlike $exclude} | Select-Object FullName

$zipFold = @();
foreach( $item in $folders){    
    $zipFold +=$item.FullName
}

Compress-Archive -Path $zipFold -DestinationPath $zipDir -CompressionLevel Fastest
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54299445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档