5

以下脚本将删除命名目录中超过 14 天.txt的文件,并使用已删除的路径和文件写入 a(在另一个论坛上找到此脚本..credit to shay):

dir c:\tmp -recurse | where {!$_.PsIsContainer -AND $_.lastWriteTime -lt (Get-Date).AddDays(-14) } | select LastWriteTime,@{n="Path";e={convert-path $_.PSPath}} | tee c:\oldFiles.txt | Remove-Item -force -whatif

我有3个问题:

  1. 什么是-lt,什么是-le,什么是-gt?我什么时候用每一个
  2. 上面的脚本只删除文件......我怎样才能删除文件夹呢?
  3. 上面的脚本是基于LastWriteTime..CreatedDate或者LastAccessed时间?
4

2 回答 2

9

好的,我们开始:

  1. -lt、-le 和 -gt 是比较运算符。lt 表示小于,le 表示小于或等于,gt 表示大于。

  2. 如果您无法控制其中的内容,则删除文件夹可能会很危险。您可能会遇到问题,请注意数据丢失。您可以使用相同的 Remove-Item cmdlet 删除文件夹,只需使用其选项即可。查看这篇文章,它对如何实现它有很好的说明: http ://searchwindowsserver.techtarget.com/generic/0,295582,sid68_gci1275887,00.html

  3. 通常,对于已经存在一段时间的文件,LastWriteTime 和 CreatedDate 和 LastAccessTime 将是相同的。在只读文件(如 DLL)中,LastAccessTime 可能比其他两个更新。在读/写文件(如 Outlook 的 pst 文件)中,WriteTime 和 AccessTime 可能相同。基本上,这完全取决于你。它们的工作方式与 LastWriteTime 相同。考虑要删除的文件的性质,然后继续!

于 2009-05-06T02:32:33.543 回答
3

-lt -le 和 -gt 是比较运算符,而不是 <、<=、>。在 powershell 命令提示符处键入“ help about_Comparison_Operators ”,了解每种类型的详细信息以及使用这些类型而不是您熟悉的其他语言的原因的原因。

要删除文件夹,您还需要删除!$.PsIsContainer 和where 过滤器的一部分。这是从目录列表中删除所有项目。

我不确定您对“CreatedDate 或 LastAccessed 时间怎么样”这个问题的要求,但您可以简单地以与 LastWriteTime 类似的方式使用这些属性,但您需要决定您要实现的逻辑。

于 2009-05-06T02:27:20.840 回答