stackoverflow,我正试图想出一个PoSh脚本来完成一个非常具体的任务,让我在这里把头撞到我的办公桌上。我对Powershell非常陌生,这里需要一些帮助。
以下是我正在努力实现的目标:
我需要能够搜索一个特定的文件夹,称为"30天扔“驱动器,并删除其中的任何子文件夹,其中有超过30天的创世日期。
示例:
P:\项目\2014\3D1004\计划1\30天投掷\档案1
P:\项目\2014\3D1004\计划2\30天折腾\04-12-2014
上面的Archive1文件夹是10天前创建的,不需要删除。上面的04-12-2014文件夹是30多天前创建的,需要删除,以及它下面的所有文件/文件夹。
项目、年、作业号和计划号都是可变的和变化的,所以硬编码搜索路径不是一种选择。
任何帮助都将是非常有用的,谢谢!
发布于 2014-05-29 19:43:42
好的,假设您的文件夹结构总是相同的,并且您总是希望该文件夹的第6层或其子文件夹,那么这将起作用:
gci P:\ -directory -recurse | ?{$_.FullName -match ".:\\.+?\\.+?\\.+?\\.+?\\.+?\\" -and $_.CreationTime -lt (get-date).AddDays(-30)}|Remove-Item -recurse -whatif如果文件夹名为:
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天的东西,我们都会删除它们,以及里面的任何东西。
发布于 2014-05-29 19:43:13
$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 }https://stackoverflow.com/questions/23940903
复制相似问题