PowerShell脚本删除旧文件

5
以下脚本将删除指定目录中14天前的文件,并将路径和被删除的文件写入一个 .txt 文件(这个脚本是从另一个论坛找到的,感谢 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

我有三个问题:

  1. 什么是-lt,什么是-le和什么是-gt?我应该在什么情况下使用它们?
  2. 上面的脚本仅删除文件...如何删除文件夹?
  3. 上面的脚本基于LastWriteTime..那么CreatedDateLastAccessed时间怎么办?

我认为管道变量应该使用下划线,即 {!$.PsIsContainer -AND $.lastWriteTime}。 - Robin Minto
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相同。考虑您想要删除的文件的性质,然后继续!


1
更具体地说,从列表中删除文件夹的条件是:!$.PsIsContainer - JasonMArcher

3
-lt、-le和-gt是比较运算符,而不是<、<=和>。在powershell命令提示符下键入“help about_Comparison_Operators”以获取每种类型的详细信息和使用这些运算符的原因,而不是您熟悉的其他语言中使用的运算符。
要删除文件夹,您需要删除where筛选器中的!$.PsIsContainer AND部分。这将从列表中删除所有目录项。
对于问题“CreatedDate或LastAccessed时间怎么样”,我不确定您想要什么,但您可以像使用LastWriteTime一样使用这些属性,但必须决定您要实现的逻辑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接