在多个zip文件夹中递归删除文件

时间:2014-11-20 14:52:12

标签: powershell

我有一个包含许多zip文件夹的文件夹,在压缩文件夹中有许多包含文件的子文件夹。我需要检查每个zip文件中的每个文件,如果它超过两年并删除它。我尝试了这个,并使用硬编码路径进行测试。但是我将来可能不知道每个zip文件的名称,我需要能够查看所有的zip文件夹。

# The two parameters. 
param([string]$limit, [string]$path) 

$stream = New-Object IO.FileStream($path, [IO.FileMode]::Open)
$mode   = [IO.Compression.ZipArchiveMode]::Update
$zip    = New-Object IO.Compression.ZipArchive($stream, $mode)

($zip.Entries | ? { !$_.PSIsContainer -and $_.CreationTime -lt $limit }) | % { $_.Delete() }

$zip.Dispose()
$stream.Close()
$stream.Dispose 

有任何关于我如何处理这个问题的想法吗?

1 个答案:

答案 0 :(得分:0)

此脚本将在根文件夹中找到所有以扩展名zip结尾的文件。将根文件夹(所有拉链都存在)作为$ path变量传入。

param([string]$limit, [string]$path)

$zips = Get-ChildItem -Path $path -recurse *.zip

foreach ($zipfile in $zips) {
    $stream = New-Object IO.FileStream($zipfile.FullName, [IO.FileMode]::Open)
    $mode   = [IO.Compression.ZipArchiveMode]::Update
    $zip    = New-Object IO.Compression.ZipArchive($stream, $mode)

    ($zip.Entries | ? { !$_.PSIsContainer -and $_.CreationTime -lt $limit }) | % { $_.Delete() }

    $zip.Dispose()     # <- probably don't need this
    $stream.Close()
}