【发布时间】:2020-03-07 00:09:17
【问题描述】:
如果这个问题看起来很奇怪,我提前道歉,这是我第一次尝试使用 powershell 来解决这样的问题。
我有一个类似于以下的目录结构:
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 命令将压缩子级项目而不保留顶级目录结构。我想保留存档中的顶级目录结构,同时排除指定的子目录。
$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"
结果是包含以下内容的存档:
d1-file1
d1-file2
d3-file1
d3-file2
而不是想要的结果:
DIR1/
d1-file1
d1-file2
DIR3/
d3-file1
d3-file2
【问题讨论】:
-
据我所知,如果你指定一个文件,你只会得到文件——根本没有路径信息。但是,如果您指定一个目录……您将获得带有路径的文件。我怀疑您将需要创建一个仅包含您想要的内容的目录树并对其进行压缩。
-
当您将条目添加到 $entries 数组时,为什么不先添加 $dir
-
@lofacture 您可以在另一个线程中找到可能的解决方案:stackoverflow.com/a/59018865/2349693
标签: powershell