powershell命令用于查找文件夹中不符合Get-Childitem
LastWriteTime
过滤器日期范围标准的文件。
因此,请检查目录是否包含在2012年10月1日(10月1日)至10月25日(10月25日)之间不包含LastWriteTime
的任何文件的文件。
我想显示那些没有该范围内任何文件的文件夹...这样我知道它们已经老了,整个目录都可以删除。
这样的例子是:
Folder1 - 10月份写的一些文件 - 忽略整个文件夹,不在结果中显示这些文件
Folder2 - 没有文件在10月份写入LastWriteTime
,因此应显示此文件夹和文件。
我知道这可以通过Get-ChildItem
完成,而且我被困在下面......
Get-ChildItem E:\LogArchive -Recurse | Where-Object{$_.LastWriteTime.......?
答案 0 :(得分:3)
头顶上的简单解决方案就是:
Where-Object{ $_.LastWriteTime -lt $startDate -or $_.LastWriteTime -gt $endDate }
其中$startDate
为01/10/2012 (1st Oct)
而$endDate
为25/10/2012 (25th Oct)
。
这种方法的问题在于它没有考虑[datetime]
中的时间因素。因此,在您的示例中,如果您将25-Oct-2012
作为上限,则会返回在25-Oct-2012 9:00
创建的文件,这可能是您不想要的。
下面的代码会根据输入[datetime]
计算时间部分被截断的[datetime]
,并构建($dayStart, $dayEnd)
的月初至今日期范围:
$entry_date = "20-Oct-2012 9:00" #to feed current date, use this: Get-Date
$dayEnd = Get-Date $entry_date -Minute 0 -Hour 0 -Second -0;
$dayStart = Get-Date $endDate -Day 1;
$dayStart, $dayEnd
对于此示例代码,这是输出:
Monday, October 01, 2012 12:00:00 AM
Saturday, October 20, 2012 12:00:00 AM
请注意,此方法非常灵活,因为您可以将$entry_date
设置为Date
或String
,它可能有也可能没有时间 - 它可以在所有这些情况下使用。然后,您可以在Where-Object
中使用此代码:
Where-Object{ $_.LastWriteTime -lt $dayStart -or $_.LastWriteTime -ge $dayEnd.AddDays(1) }
在将-ge $dayEnd.AddDays(1)
与25-Oct-2012
进行比较时,请注意25-Oct-2012 9:00
如何解决问题。
答案 1 :(得分:2)
试试这个:
[datetime]$startDate = "10/01/2012" # or $startDate = get-date -Date 1/10/2012
[datetime]$endDate = "10/25/2012" # or $endDate = get-date -Date 25/10/2012
? { $_.LastWriteTime -lt $startDate -or $_.LastWriteTime -gt $endDate }