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
我正在编写一个 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