寫過一篇 用批次檔 (Batch) 刪除指定天數之前 (過期) 所有子目錄及檔案
以下改用 PowerShell 處理, 邏輯:
1. 找出過期檔案予以刪除
2. 找出過期的空資料夾予以刪除 (從最深層的子目錄開始往上一層一層檢查)
不知道是否需要寫得這麼複雜就是了
============ 程式開始============
#Days Before to Delete
$Days = "14";
# Path To Process (Recurse)
$TargetFolder = "C:\TargetFolder";
$Excepts = @()
# Except Files and Folders Name
$Excepts += "!!_Readme.txt"
$Excepts += "!!_Caution.txt"
# ------------------------------------------------------------------
if (!(Test-Path -path $TargetFolder)) {
 Write-Host "$TargetFolder not Exist!";
 exit;
};
$LastWrite = $(Get-Date).AddDays(-$Days);
# Delete Files
$Items = Get-Childitem $TargetFolder -File -Recurse | Where {$_.LastWriteTime -le $LastWrite};
foreach ($Item in $Items) {
    if ($Item -ne $NULL) {
  $Exception = 0
  foreach ($Except in $Excepts) {
   if ($Item.Name -eq $Except) {
    $Exception = 1
   };
  };
  if ($Exception -eq 0) {
   Remove-Item $Item.FullName -Force -ErrorAction SilentlyContinue;
   Write-Host "Remove ""$($Item.FullName)"""
  };
    };
};
# Delete Empty Folders
$TargetDeep = $($($TargetFolder.Split("\")).Count-1)
$ItemDeep = 0
$CurrentDeep = 1
Do {
 $Items = Get-Childitem $TargetFolder -Directory -Recurse | Where {($_.LastWriteTime -le $LastWrite) -and ( (Get-Childitem $_.FullName).Count -eq 0) }
 foreach ($Item in $Items) {
  if ($Item -ne $NULL) {
   $Exception = 0
   foreach ($Except in $Excepts) {
    if ($Item.Name -eq $Except) {
     $Exception = 1
    };
   };
   if ($Exception -eq 0) {
    Remove-Item $Item.FullName -Force -ErrorAction SilentlyContinue;
    Write-Host "Remove ""$($Item.FullName)"""
    $NowItemDeep = $($($($Item.FullName).Split("\")).Count-$TargetDeep-1)
    if ($NowItemDeep -gt $ItemDeep) {
     $ItemDeep = $NowItemDeep
    };
   };
  };
 };
 $CurrentDeep += 1;
} while ($CurrentDeep -le $ItemDeep);
沒有留言:
張貼留言