Powershell删除除某些符合特殊日期条件的所有文件

时间:2015-07-09 11:37:10

标签: powershell

我有一个场景。在谈到这一点之前,让我说我需要一个逻辑从这里开始。我已经尝试了一些东西(我将在稍后讲述),但这似乎并没有起作用。

我每小时都会创建一些文件。我正在编写脚本(powershell)以下面给出的方式删除它们:

在一天中创建的24个文件中,我需要每天只保留1个(这是最后一个和最新创建的,需要删除其他23个)一整周。这是完成的。

现在,每周我需要以每周六晚上的方式执行此操作,我需要删除6个每日文件并保留最新文件(第7天)。我被困在这里。

我尝试过的是使用$ date.AddDays(-1),这在第一周没问题。第二周,我需要保留上周的(1)文件并需要保留本周的(1)文件。所以,这里我的逻辑用完了。

在同一场景中,我也需要每月一次。如果我每周得到一些逻辑(这是 Bold ),我想我可以完成这项工作。

最早可以请任何人帮助我。任何建议或想法都会非常感激。

3 个答案:

答案 0 :(得分:2)

为什么要费心计算?利用PowerShell的强大功能:)! 获取日期(来自文件,来自var或其他)投射日期时间并显示dayOfWeek属性

([system.datetime]"09/07/2015").DayOfWeek

答案 1 :(得分:1)

如果我在所有评论中迷失了,请打电话给我,但你可以用它来获取当周当前月的所有日期。

$now = Get-date
1..[DateTime]::DaysInMonth($now.Year,$now.Month) | ForEach-Object{get-date -day $_} | Where-Object{$_.DayOfWeek -eq "Saturday"}

2015年7月

Saturday, July 04, 2015 8:22:53 AM
Saturday, July 11, 2015 8:22:53 AM
Saturday, July 18, 2015 8:22:53 AM
Saturday, July 25, 2015 8:22:53 AM

当然,您可能只想要几天,所以我们可以添加到此末尾。 Select-Object -ExpandProperty Day

4
11
18
25

您现在可以在日期排除逻辑中使用这些值。如果您提前比较日期,这可能很有用。 PowerShell仍然有逻辑来计算个别日期,看它们是否是“星期六”。所以像Kayasax一样是在创造

Get-ChildItem *.* | Where-Object{ $_.lastwritetime.dayofweek -notmatch "saturday"} |select-object -expandproperty fullname

并为小时或不需要的内容添加其他日期逻辑。

答案 2 :(得分:0)

从您已构建的部分的逻辑开始,即将在同一天创建的文件组合在一起,并仅保留每个组中的最新文件。这无疑取决于将文件创建的时间戳转换为日期。

你需要的是一个功能,称之为"周"在给定日期的情况下,返回周数。因此,对于2015年7月5日至2015年7月11日期间的日期,它可能会返回数字" 27",这意味着一年中的第27周。

现在创建类似于您已经构建的逻辑的逻辑。但是,不是按天分组,而是按周编号分组。

如果您打算保留这些数据超过一年,您需要做一些类似于明年第一周返回的事情" 53"。