计算器, 我正在尝试编写一个 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/