【问题标题】:Windows PowerShell - Delete Files Older than X DaysWindows PowerShell - 删除早于 X 天的文件
【发布时间】:2016-10-28 22:34:24
【问题描述】:

我目前是 PowerShell 的新手,我根据网络上收集的信息创建了一个脚本,该脚本将对文件夹中的 LastWriteTime 小于 1 天的文件执行删除操作。

目前脚本如下:

$timeLimit = (Get-Date).AddDays(-1) 
$oldBackups = Get-ChildItem -Path $dest -Recurse -Force -Filter "backup_cap_*" |
                Where-Object {$_.PSIsContainer -and $_.LastWriteTime -lt $timeLimit}

foreach($backup in $oldBackups)
{
    Remove-Item $dest\$backup -Recurse -Force -WhatIf
}

据我所知,-WhatIf 命令将向控制台输出该命令在实际场景中“应该”执行的操作。问题是-WhatIf 没有输出任何内容,即使我将其删除,文件也没有按预期删除。

服务器是 Windows 2012 R2,命令正在 PowerShell ISE V3 中运行。

当命令起作用时,它将被“翻译”成一个任务,该任务将在另一个任务完成备份某些内容后每晚运行。

【问题讨论】:

  • 2) 如果要删除文件,为什么只包括带有$PSIsContainer 的文件夹? 3) 如果那是您的脚本,那么 $dest 来自哪里?如果未定义,gci 将读取当前工作目录而不会出错。 4) 你确认$oldBackups 里面有什么吗? 5) Remove-Item 是否会抛出任何关于文件不存在的异常?
  • $dest 在上面的外部范围中声明。它是脚本的工作目录。在那里创建备份。不,不会抛出异常。关于 $PSIsContainer,你是对的。我们决定备份不会在文件夹中,它们将直接在工作目录中,所以基本上备份将在 mysqldump 输出的模式 backup_cap_dateOfWrite 下。

标签: powershell powershell-3.0


【解决方案1】:

我在管道中做到了

Get-ChildItem C:\temp | ? { $_.PSIsContainer -and $_.LastWriteTime -lt $timeLimit } | Remove-Item -WhatIf

这对我有用。所以你不必关心文件的正确路径。

【讨论】:

    【解决方案2】:

    其他解决方案

    $timeLimit = (Get-Date).AddDays(-1) 
    Get-ChildItem C:\temp2 -Directory | where LastWriteTime -lt $timeLimit  | Remove-Item -Force -Recurse
    

    【讨论】:

      【解决方案3】:

      最初的问题是$dest\$backup 会假设每个文件都在根文件夹中。但是通过使用$backup 上的fullname 属性,您不需要静态定义目录。

      另一个注意事项是 Remove-Item 采用字符串数组,因此您也可以摆脱 foreach

      这是对您的脚本的修复,无需使用管道。请注意,由于我使用了where 方法,因此至少需要版本 4

      $timeLimit = (Get-Date).AddDays(-1) 
      $Backups = Get-ChildItem -Path $dest -Directory -Recurse -Force -Filter "backup_cap_*"
      $oldBackups = $backups.where{$_.LastWriteTime -lt $timeLimit}
      Remove-Item $oldBackups.fullname -Recurse -Force -WhatIf
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-28
        • 2020-03-11
        • 2015-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-22
        • 1970-01-01
        相关资源
        最近更新 更多