Powershell - 删除具有超过30天的特定名称的文件夹中的子文件夹

时间:2014-05-29 18:57:12

标签: powershell

计算器, 我正在尝试用一个PoSh脚本来完成一项非常具体的任务,让我在这里对着我的桌子敲打我的脑袋。我对Powershell很新,需要一些帮助。

这是我想要完成的事情:

我需要能够在驱动器中搜索名为" 30 Day Toss"的特定文件夹。并删除其中创建日期超过30天的任何子文件夹。

示例:

P:\ Project \ 2014 \ 3D1004 \ Plan 1 \ 30 Day Toss \ Archive1

P:\ Project \ 2014 \ 3D1004 \ Plan 2 \ 30 day Toss \ 04-12-2014

上面的Archive1文件夹是在10天前创建的,不需要删除。 上面的04-12-2014文件夹是在30天前创建的,需要删除,以及其下的所有文件/文件夹。

项目,年份,工作号和计划编号都是可变的和变化的,因此对搜索路径进行硬编码不是一个选项。

任何帮助都会非常高兴,谢谢!

2 个答案:

答案 0 :(得分:2)

$date = (get-date).AddDays(-30)

$folders = gci "p:\" -filter "30 Day Toss" -recurse

Foreach ($subfolder in $folders.FullName) { gci $subfolder  | where {$_.psiscontainer} | where { $_.CreationTime -lt $date} | remove-item -force -recurse }

答案 1 :(得分:2)

好的,假设您的文件夹结构始终相同,并且您始终需要第6级文件夹或子文件夹,这将起作用:

gci P:\ -directory -recurse | ?{$_.FullName -match ".:\\.+?\\.+?\\.+?\\.+?\\.+?\\" -and $_.CreationTime -lt (get-date).AddDays(-30)}|Remove-Item -recurse -whatif

如果文件夹名称为:

,则查看文件夹的整个P:驱动器
P:\<anything>\<anything>\<anything>\<anything>\<anything>\<anything>

它检查它是否是在30天前创建的,如果是,则删除它及其所有内容。但它必须让脚本有很多级别来查看它。

编辑:好的,让我们稍微改变一下。如果我们查看的文件夹总是被称为“30天折腾”,我们将查找具有该名称的所有文件夹,然后在每个文件夹中列出一些内容。够容易!首先,代码:

gci P:\ -Directory -Recurse | ?{$_.Name -ieq "30 Day Toss"} | %{GCI $_.FullName | ?{$_.CreationTime -lt (get-date).AddDays(-30)} | Remove-Item -Recurse -Force}

然后稍微分解一下。

首先,我们获得P:驱动器上所有文件夹的列表。然后我们只选择名为“30天折腾”(不区分大小写)的那些。

对于我们使用该名称找到的每个文件夹,我们为该文件夹中的内容提取目录列表,然后仅选择超过30天的内容。对于超过30天的每一件事,我们都会删除它们以及它们内部的任何内容。