【问题标题】:Powershell script to delete old filesPowershell脚本删除旧文件
【发布时间】:2009-05-06 02:15:48
【问题描述】:

以下脚本将删除指定目录中超过 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

我有 3 个问题:

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

【问题讨论】:

  • 我认为 {!$.PsIsContainer -AND $.lastWriteTime 应该有管道变量的下划线,即 {!$_.PsIsContainer -AND $_.lastWriteTime

标签: c# powershell delete-file


【解决方案1】:

好的,我们开始:

  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 相同。考虑您要删除的文件的性质,然后继续!

【讨论】:

  • 更具体地说,从列表中删除文件夹的条件是:!$.PsIsContainer
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多