我尝试在路径中仅删除超过 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 的情况下运行它以验证逻辑是否合理。