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

标签 powershell

计算器, 我正在尝试编写一个 PoSh 脚本来完成一项非常具体的任务,这让我不得不用头撞 table 。我对 Powershell 还很陌生,需要一些帮助。

这是我想要实现的目标:

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

示例:

P:\Project\2014\3D1004\计划1\30天折腾\Archive1

P:\Project\2014\3D1004\计划 2\30 天折腾\04-12-2014

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

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

任何帮助将不胜感激,谢谢!

最佳答案

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

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 Day Toss”,我们将查找具有该名称的所有文件夹,然后在每个文件夹中提取内容列表。够简单的!一、代码:

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

然后将其分解一点。

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

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

关于Powershell - 删除特定名称超过 30 天的文件夹中的子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940903/

相关文章:

powershell - 通过脚本将默认主题上载到IBM Cognos Analytics

powershell - Get-Childitem解决方法

sql-server - Invoke-SqlCmd 不返回长字符串?

command-line - Windows事件的“In words”部分

powershell - 如何从 Invoke-Sqlcmd 诊断此异常?

sql-server - 使用不同的凭据调用 SQLCmd

powershell - 在PowerShell中等号后是否需要使用反引号?

azure - 'az-getmetric 出现问题

powershell - 计算文本文件中 ip 列表的出现次数

powershell - 如何使用 Powershell 在 Twitter 上发布推文?