Windows PowerShell - 删除早于 X 天的文件
Windows PowerShell - Delete Files Older than X Days
我目前是 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
命令将向控制台输出命令 "should" 在现实场景中执行的操作。问题是 -WhatIf
没有输出任何内容,即使我删除它,文件也没有按预期删除。
服务器是 Windows 2012 R2,命令正在 运行PowerShell ISE V3 中运行。
当命令生效时,它将 "translated" 进入一个任务,该任务将在每晚 运行 另一个任务完成备份一些内容后完成。
我在管道中做到了
Get-ChildItem C:\temp | ? { $_.PSIsContainer -and $_.LastWriteTime -lt $timeLimit } | Remove-Item -WhatIf
这对我有用。因此您不必关心文件的正确路径。
其他解决方案
$timeLimit = (Get-Date).AddDays(-1)
Get-ChildItem C:\temp2 -Directory | where LastWriteTime -lt $timeLimit | Remove-Item -Force -Recurse
最初的问题是 $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
我目前是 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
命令将向控制台输出命令 "should" 在现实场景中执行的操作。问题是 -WhatIf
没有输出任何内容,即使我删除它,文件也没有按预期删除。
服务器是 Windows 2012 R2,命令正在 运行PowerShell ISE V3 中运行。
当命令生效时,它将 "translated" 进入一个任务,该任务将在每晚 运行 另一个任务完成备份一些内容后完成。
我在管道中做到了
Get-ChildItem C:\temp | ? { $_.PSIsContainer -and $_.LastWriteTime -lt $timeLimit } | Remove-Item -WhatIf
这对我有用。因此您不必关心文件的正确路径。
其他解决方案
$timeLimit = (Get-Date).AddDays(-1)
Get-ChildItem C:\temp2 -Directory | where LastWriteTime -lt $timeLimit | Remove-Item -Force -Recurse
最初的问题是 $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