如果这个问题看起来很奇怪,我提前道歉,这是我第一次尝试将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
答案 0 :(得分:1)
这是一个可能的选择(我的评论是我的意思)
$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 :(得分:0)
$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