Powershell 获取未在特定日期范围内写入的文件/文件夹

Powershell 获取未在特定日期范围内写入的文件/文件夹,powershell,powershell-2.0,Powershell,Powershell 2.0,powershell命令用于查找文件夹中不符合LastWriteTime的Get Childitem筛选器日期范围条件的文件 因此,检查目录中是否有不包含LastWriteTime在2012年10月1日至2012年10月25日之间的文件 我想显示没有任何文件在该范围内的文件夹…这样我就知道它们是旧的,可以删除整个目录 例如: Folder1-10月内写入的某些文件-忽略整个文件夹,不在结果中显示这些文件 Folder2-没有文件在10月份写入LastWriteTime,因此应显示此文件夹和文件

powershell命令用于查找文件夹中不符合LastWriteTime的Get Childitem筛选器日期范围条件的文件

因此,检查目录中是否有不包含LastWriteTime在2012年10月1日至2012年10月25日之间的文件

我想显示没有任何文件在该范围内的文件夹…这样我就知道它们是旧的,可以删除整个目录

例如:

Folder1-10月内写入的某些文件-忽略整个文件夹,不在结果中显示这些文件

Folder2-没有文件在10月份写入LastWriteTime,因此应显示此文件夹和文件

我知道这可以通过Get ChildItem完成,我被困在下面的位上

Get-ChildItem E:\LogArchive -Recurse | Where-Object{$_.LastWriteTime.......?

最简单的解决方案是:

Where-Object{ $_.LastWriteTime -lt $startDate -or $_.LastWriteTime -gt $endDate }
其中,$startDate为2012年10月1日10月1日,$endDate为2012年10月25日10月25日

这种方法的问题在于它没有考虑[datetime]中的时间因素。因此,在您的示例中,如果您将2012年10月25日作为上限,它将返回在2012年10月25日9:00创建的文件,而您可能不需要这些文件

下面的代码基于输入[datetime]计算时间部分被截断的[datetime],并构建$dayStart、$dayEnd的月到日日期范围:

对于此示例代码,以下是输出:

Monday, October 01, 2012 12:00:00 AM 
Saturday, October 20, 2012 12:00:00 AM
请注意,这种方法是灵活的,因为您可以将$entry_date设置为date或String,它可能有时间部分,也可能没有时间部分——在所有这些情况下都可以使用。然后,您可以在Where对象中使用此代码:


请注意,将2012年10月25日与2012年10月25日9:00进行比较时,-ge$dayEnd.AddDays1如何解决此问题。

最简单的解决方案是:

Where-Object{ $_.LastWriteTime -lt $startDate -or $_.LastWriteTime -gt $endDate }
其中,$startDate为2012年10月1日10月1日,$endDate为2012年10月25日10月25日

这种方法的问题在于它没有考虑[datetime]中的时间因素。因此,在您的示例中,如果您将2012年10月25日作为上限,它将返回在2012年10月25日9:00创建的文件,而您可能不需要这些文件

下面的代码基于输入[datetime]计算时间部分被截断的[datetime],并构建$dayStart、$dayEnd的月到日日期范围:

对于此示例代码,以下是输出:

Monday, October 01, 2012 12:00:00 AM 
Saturday, October 20, 2012 12:00:00 AM
请注意,这种方法是灵活的,因为您可以将$entry_date设置为date或String,它可能有时间部分,也可能没有时间部分——在所有这些情况下都可以使用。然后,您可以在Where对象中使用此代码:

请注意,将2012年10月25日与2012年10月25日9:00进行比较时,-ge$dayEnd.AddDays1如何解决此问题。

尝试以下方法:

[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 }
试试这个:

[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 }

这似乎可行,但我得到以下错误:运算符'-gt'的参数不正确:无法将2012年9月2日20:00:02和2012年10月23日进行比较。错误:无法将值23/10/2012转换为System.DateTime类型。错误:字符串未被识别为有效的日期时间。。在第1行char:112+Get-ChildItem E:\LogArchive-Recurse | Where对象{$$\u.LastWriteTime-lt 01/10/2012-或$\u.LastWriteTime-gt@lara400:如果您将日期指定为字符串,请确保将其转换为[datetime],并小心地将其置于您的区域性所期望的格式。或者您可以使用此格式[datetime]2012年10月25日-应在所有情况下都有效。或使用[datetime]::ParseExact.这似乎有效,但我收到以下错误:运算符'-gt'的参数错误:无法将2012年9月2日20:00:02与2012年10月23日进行比较。错误:无法将2012年10月23日的值转换为System.DateTime类型。错误:字符串未被识别为有效的DateTime。。在第1行char:112+get ChildItem E:\LogArchive-Recurse | Where对象{$\.LastWriteTime-lt 01/10/2012-或$\.LastWriteTime-gt@lara400:如果您指定日期为字符串,请确保将其转换为[datetime],并小心地将其置于您的区域性所期望的格式。或者您可以使用此格式[datetime]2012年10月25日-在所有情况下都应适用。或者使用[datetime]::ParseExact.你的答案与我的主要区别是什么?@neolik它显示了对比较所需的对象[datetime]的转换。它不在原始问题中,因此没有显著差异,IMHO。你的答案与我的主要区别是什么?@neolik它显示了对对象[datetime]的转换需要进行比较。它不在原始问题中,因此没有显著差异,IMHO。