Powershell在两个日期之间创建ZIP文件

问题描述 投票:0回答:2

我尝试压缩在两个日期之间创建的文件。

param(
[String]$path="DieserPfadWirdAlsParameterGesetzt"
)

$exclude=@("*.zip")
$currentYear = (Get-Date).AddYears(-1).ToString("yyyy")

$firstDayOfYear = Get-Date -Day 1 -Month 1 -Year $currentYear -Hour 0 -Minute 0 -Second 0
$lastDayOfYear = Get-Date -Day 31 -Month 12 -Year $currentYear -Hour 23 -Minute 59 -Second 59

$files = Get-ChildItem -Path $path -recurse -exclude "$exclude" |     
    where {
        $_.CreationTime -ge $firstDayOfYear -and             
        $_.CreationTime -lt $lastDayOfYear            
          }

Compress-Archive -Path $files.FullName -DestinationPath "$path\Archiv$currentYear.zip"
Remove-Item $files.FullName -Recurse -Force -Exclude $exclude

该脚本可以工作,但是......让我们说在目录中C:\Users\...\Test是一个在2018年创建的文件夹,在该文件夹中是一个也是在2018年创建的文件。该脚本将创建新的zip文件(Archiv2018.zip)但是在zip将有文件夹和文件单独...

有没有办法只有包含文件的文件夹被压缩,而不是单独包含文件的文件夹和文件?

powershell zip
2个回答
1
投票

你的Get-ChildItem线导致返回一大堆物品。无论何时它们都是文件或文件夹。最终会得到一个包含两者的对象数组。

在抽象级别上,它将如下所示:

  • 夹\
  • 文件夹\ a.file
  • 文件夹\ b.file

如果你看一下Compress-Archive的定义,你会发现-Path参数的以下描述。

指定要添加到存档压缩文件的文件的路径。此参数可以接受通配符。通配符允许您将文件夹中的所有文件添加到压缩存档文件中。要指定多个路径,并在输出压缩文件中的多个位置包含文件,请使用逗号分隔路径。

如果将其交给单个文件,它不会保留路径。因此,它将尽职尽责地压缩Folder\内的所有内容,并添加a.fileb.file

要解决这个问题,您可以为Get-ChildItem-File指定-Directory的额外过滤器,以获取文件或目录。我的猜测是你只想要具有各自文件夹结构的文件。

为了完成这项工作,您可以将文件复制到临时位置并压缩整个临时位置。它只包含您想要的文件。


0
投票

-File添加到Get-ChildItem只返回文件:

Get-ChildItem -Path $path -recurse -exclude "$exclude" -File
© www.soinside.com 2019 - 2024. All rights reserved.