仅删除文件夹及其文件,但不要将其删除到其他路径 PowerShell

仅删除文件夹及其文件,但不要将其删除到其他路径 PowerShell

我尝试在路径中仅删除超过 7 天的文件夹,但在同一路径中有一些文件夹,其中有超过 7 天的文件,我想保留这些文件。示例:

C:\BACKUP\BAK_15-04-2020\some_files
C:\BACKUP\BAK_14-04-2020\some_files
C:\BACKUP\BAK_13-04-2020\some_files
C:\BACKUP\BAK_12-04-2020\some_files
C:\BACKUP\BAK_11-04-2020\some_files
C:\BACKUP\BAK_10-04-2020\some_files

基本上我只想删除文件夹及其内容,例如 C\BACKUP\BAK 10-04-2020

答案1

PowerShell 的测试步骤很简单。首先,我们只想列出 C:\BACKUP 中的目录:

PS C:\> Get-ChildItem -Path c:\BACKUP -Directory

Directory: C:\BACKUP


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        16-Dec-19  11:33 AM                folder2019
d-----        19-May-20  10:09 AM                folder2020

但我们想要的不是任何文件夹,而是超过 7 天的文件夹。幸运的是,PowerShell 允许我们使用 Format-List 来检查对象:

PS C:\> Get-ChildItem -Path c:\BACKUP -Directory | Format-List
Name           : folder2019
CreationTime   : 05-Aug-19 5:03:57 PM
LastWriteTime  : 16-Dec-19 11:33:34 AM
LastAccessTime : 16-Dec-19 11:33:34 AM
Mode           : d-----
LinkType       :
Target         : {}

LastWriteTime 似乎是一个很好的过滤器。我们需要一个日期时间对象来比较,因此我们使用 Get-Date 来获取当前日期减 7。

PS C:\> $limit = (Get-Date).AddDays(-7)
PS C:\> Get-ChildItem -Path c:\BACKUP -Directory | where LastWriteTime -lt "$limit"

Directory: C:\BACKUP


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        16-Dec-19  11:33 AM                folder2019

仅列出目录并没有多大用处,所以让我们将其删除:

PS C:\> Get-ChildItem -Path c:\BACKUP -Directory | where LastWriteTime -lt "$limit" | Remove-Item

与往常一样,当删除内容时,请在没有 Remove-Item 的情况下运行它以验证逻辑是否合理。

相关内容