存档超过 6 个月的文件
Archive files older than 6 months
文件夹 X 有很多子文件夹 A、B、C、D...每个子文件夹都有很多文件,我想存档这些子文件夹中超过 6 个月的所有文件。之后检查是否创建存档并删除已存档的文件。
这是我尝试过的:
#$SourceFolder = "C:\Users\sec\Desktop\X"
ForEach-Object
{
Get-ChildItem -Path "$($_.FullName)" -Exclude "*.zip"
Where-Object {($_.LastWriteTime -lt (Get-Date).AddMonths(-6))} |
Compress-Archive -DestinationPath "$($_.FullName).2020andOlder.zip" -Update;
if (Test-Path 06.2020andOlder.zip) {
Remove-Item -Force
}
}
假设您希望每个子文件夹都以旧文件所在的 .zip 存档结束,试试这个:
使用 Group-Object
将同一子目录中的所有旧文件组合在一起,并使用它来创建 .zip 文件并在压缩后删除原始文件。
$SourceFolder = 'D:\Test'
$refDate = (Get-Date).AddMonths(-6).Date # take this from midnight
Get-ChildItem -Path $SourceFolder -File -Recurse -Exclude "*.zip" |
Where-Object { $_.LastWriteTime -lt $refDate } |
Group-Object DirectoryName | ForEach-Object {
# construct the target folder path for the zip file using the Name of each group
$zip = Join-Path -Path $_.Name -ChildPath '06.2020andOlder.zip'
# archive all files in the group
Compress-Archive -Path $_.Group.FullName -DestinationPath $zip -Update
# here is where you can delete the original files after zipping
$_.Group | Remove-Item -WhatIf
}
请注意,我已将开关 -WhatIf
添加到 Remove-Item cmdlet。这是一个安全开关,所以您实际上还没有删除任何东西。该 cmdlet 现在仅显示 将 删除的内容。一旦您对此输出感到满意,请删除 -WhatIf
开关以便删除文件。
文件夹 X 有很多子文件夹 A、B、C、D...每个子文件夹都有很多文件,我想存档这些子文件夹中超过 6 个月的所有文件。之后检查是否创建存档并删除已存档的文件。
这是我尝试过的:
#$SourceFolder = "C:\Users\sec\Desktop\X"
ForEach-Object
{
Get-ChildItem -Path "$($_.FullName)" -Exclude "*.zip"
Where-Object {($_.LastWriteTime -lt (Get-Date).AddMonths(-6))} |
Compress-Archive -DestinationPath "$($_.FullName).2020andOlder.zip" -Update;
if (Test-Path 06.2020andOlder.zip) {
Remove-Item -Force
}
}
假设您希望每个子文件夹都以旧文件所在的 .zip 存档结束,试试这个:
使用 Group-Object
将同一子目录中的所有旧文件组合在一起,并使用它来创建 .zip 文件并在压缩后删除原始文件。
$SourceFolder = 'D:\Test'
$refDate = (Get-Date).AddMonths(-6).Date # take this from midnight
Get-ChildItem -Path $SourceFolder -File -Recurse -Exclude "*.zip" |
Where-Object { $_.LastWriteTime -lt $refDate } |
Group-Object DirectoryName | ForEach-Object {
# construct the target folder path for the zip file using the Name of each group
$zip = Join-Path -Path $_.Name -ChildPath '06.2020andOlder.zip'
# archive all files in the group
Compress-Archive -Path $_.Group.FullName -DestinationPath $zip -Update
# here is where you can delete the original files after zipping
$_.Group | Remove-Item -WhatIf
}
请注意,我已将开关 -WhatIf
添加到 Remove-Item cmdlet。这是一个安全开关,所以您实际上还没有删除任何东西。该 cmdlet 现在仅显示 将 删除的内容。一旦您对此输出感到满意,请删除 -WhatIf
开关以便删除文件。