我尝试压缩在两个日期之间创建的文件。
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将有文件夹和文件单独...
有没有办法只有包含文件的文件夹被压缩,而不是单独包含文件的文件夹和文件?
你的Get-ChildItem
线导致返回一大堆物品。无论何时它们都是文件或文件夹。最终会得到一个包含两者的对象数组。
在抽象级别上,它将如下所示:
如果你看一下Compress-Archive
的定义,你会发现-Path
参数的以下描述。
指定要添加到存档压缩文件的文件的路径。此参数可以接受通配符。通配符允许您将文件夹中的所有文件添加到压缩存档文件中。要指定多个路径,并在输出压缩文件中的多个位置包含文件,请使用逗号分隔路径。
如果将其交给单个文件,它不会保留路径。因此,它将尽职尽责地压缩Folder\
内的所有内容,并添加a.file
和b.file
。
要解决这个问题,您可以为Get-ChildItem
或-File
指定-Directory
的额外过滤器,以获取文件或目录。我的猜测是你只想要具有各自文件夹结构的文件。
为了完成这项工作,您可以将文件复制到临时位置并压缩整个临时位置。它只包含您想要的文件。
将-File
添加到Get-ChildItem
只返回文件:
Get-ChildItem -Path $path -recurse -exclude "$exclude" -File