如何使用powershell删除子目录,而不考虑父文件夹的名称



PS脚本新手,请耐心等待。

我有以下文件夹结构-D:\Folder1、Folder2、Folder3……每个父文件夹都有相同的子文件夹结构,使用yyyymmdd格式(D:\Folder1\20221007(。我想使用PS删除这些子文件夹中任何超过90天的文件夹。我们总是添加/删除父文件夹。我使用了下面的脚本,但由于父文件夹的更改越来越频繁,它变得无法管理。我在想,我可以列出所有的父文件夹,然后传入它们,然后循环使用,但不确定如何最好地做到这一点。如果可能的话,我还想写下所有被删除的文件夹的完整路径。

$DaysAgo = (Get-Date).AddMonths(-3)
$Folders = (Get-ChildItem "D:Folder1" | Where-Object {$_.PSIsContainer -Eq $True -And $_.Name -Match '^d{8}'})
ForEach ($f In $Folders) {
$FolderDate = Get-Date -Year $f.Name.SubString(0,4) -Month $f.Name.SubString(4,2) -Day $f.Name.SubString(6,2)
If ($FolderDate -LT $DaysAgo) {
Remove-Item $f.FullName -Recurse
}
}

到此为止:

$DaysAgo = (Get-Date).AddMonths(-3)
#Specify the switch parameter "-Directory", so get-childitem will only return directories. Also you can filter on the creation date of the directory
$Folders = Get-ChildItem -Directory -Path "D:Folder1" | Where-Object {$_.Name -Match '^d{8}' -and $_.CreationTime -lt $DaysAgo}
#You can pass all paths to the parameter -path
$null = Remove-Item -Path $Folders.FullName -Confirm:$false -Force -recurse

尝试一下:

$DaysAgo = (Get-Date).AddMonths(-3)
$Folders = Get-ChildItem -Directory "D:Folder**" 
ForEach ($f In $Folders) {
try {
$FolderDate = [Datetime]::ParseExact($f.Name, "yyyyMMdd", $null)
If ($FolderDate -lt $DaysAgo) {
Remove-Item $f.FullName -Recurse
}
} catch { }
}

最新更新