Powershell Zip Directory 排除一些子目录

Powershell Zip Directory exclude some Subdirectories

我正在编写一个 powershell 脚本,我想在其中压缩一个包含 2 个子目录的目录。在其中一个子目录中,我想排除另一个目录。

myDirectory
-- sub 1
--- sub 1.1
--- sub 1.2
-- sub 2
--- sub 2.1
--- sub 2.2

我写了这个脚本,但它不起作用。谁能给我提示或告诉我我做错了什么?

$ChildItemPath = "myDirectory"

$Date = [DateTime]::Now.ToString("yyyyMMdd-HHmmss")
$Exclude = @("myDirectory/sub 2/sub 2.1")

$DestinationPath = "Archive-v" + $Date

$CompressPath = Get-ChildItem -Path $ChildItemPath -Exclude $Exclude

Compress-Archive -Path $CompressPath -DestinationPath $DestinationPath -update

.bat/.ps1 文件与 'myDirectory'

在同一目录中

------------------------ 编辑 19:55 -------------- -------------- 当子文件夹非常 'small' 时,Reza 建议的解决方案工作正常。我试图从 AngularClient-dir 中排除 'node_modules'。

所以最终的 .zip 文件包含一个 'serverside'-dir: vs217 asp.net 核心项目 和一个 'clientside'-dir: angular4 项目没有 node_modules

要在创建 zip 文件时排除文件夹的某些子文件夹,作为一种选择,您可以将不包括这些子文件夹的文件夹复制到 windows 的临时目录中的临时文件夹。然后压缩临时文件夹:

$inputFolder = "C:\MyDirectory"
$excludeFolders = @("\Sub1\Sub1-2", "\Sub2\Sub2-2")
$ouputFileName="C:\MyFile.zip"

$tempFolder = [System.IO.Path]::GetTempFileName()
Remove-Item $tempFolder -Force
New-Item -Type  Directory -Path $tempFolder -Force
$exclude =@()
$excludeFolders | ForEach-Object {
 $exclude+=(Join-Path $inputFolder $_) 
 Get-ChildItem (Join-Path $inputFolder $_) -Recurse | 
  ForEach-Object{$exclude+=$_.FullName}}
Get-ChildItem $inputFolder -Recurse | Where-Object { $_.FullName -notin $exclude} |
 Copy-Item -Destination {Join-Path $tempFolder $_.FullName.Substring($inputFolder.length)}

Get-ChildItem $tempFolder |
Compress-Archive -DestinationPath $ouputFileName -Update
# Remove-Item $tempFolder -Force -Recurse