Powershell Zip目录排除了一些子目录

时间:2017-12-06 15:09:22

标签: powershell zip node-modules subdirectory

我正在写一个powershell脚本,我想在其中.zip一个包含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 ----------------- --------- 当子文件夹非常“小”时,Reza建议的解决方案工作正常。我试图从AngularClient-dir中排除'node_modules'。

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

1 个答案:

答案 0 :(得分:1)

要在创建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