【问题标题】:Remove 2nd level Sub Directories删除二级子目录
【发布时间】:2017-06-02 13:50:42
【问题描述】:

下面的脚本在E:\WebDelivery\MagicOS 目录中查找文件夹。如果此目录中的任何文件夹超过 14 天,它将删除它们及其子目录。它排除了名为upd.info.raf.的文件

我需要将脚本更改为仅在子目录中查找修改日期,如果该日期超过 14 天,则需要删除这些文件夹及其内容,但保留 S6.15T7.12单独键入父目录。

这是文件夹结构: E:\WebDelivery\MagicOS ->> 在此目录下是 S6.15, T7.12, S5.6 等目录,在每个目录下都有目录,所有目录的名称都为 1、2,3 等,可能还有一个名为 upd.info.raf 的文件

E\WebDelivery\MagicOS ->> S6.15 
                         ->> 1
                         ->> 2

目前,该脚本正在检查 S6.15 级别文件夹的修改日期,并删除该文件夹及其子目录(如果它们早于 14 天)。相反,我需要检查数字子目录 1、2、3 等是否有修改日期,如果它们早于 14 天,则将其删除,但保留父 S6.15 目录。基本上我不关心 S6.15 文件夹上的日期,只关心数字子文件夹 1、2、3 等...

这就是我难过的地方。任何想法都会有所帮助。这是现有的脚本。

    $Today = Get-Date
    $DaysToKeep = 14
    $TargetFolder = "E:\WebDelivery\MagicOS"
    $LastWrite = $Today.AddDays(-$DaysToKeep)
    $excludeFolders = @("testdir","testdir2")

    $Folders = Get-Childitem –path $Targetfolder |
    Where {$_.psIsContainer} |
    Where {$_.LastWriteTime -le "$LastWrite"} |
    Where {$excludeFolders -notcontains $_.Name}

    If ($Folders) {
        foreach ($Folder in $Folders) {
            Write-Host "Processing Folder $($Folder.Name)"
            $items = Get-ChildItem -Path $Folder.FullName -Exclude 
    "upd.info.raf" -Recurse
            If ($items) {
        Write-Host "Removing: $($Folder.Name)"
               # $items | Remove-Item -Recurse -Verbose
            } Else {
                Write-Host "There are no items to remove in $($Folder.Name)"
            }
       }
    } Else {
    Write-Host "There are no folders to empty."
   }

【问题讨论】:

    标签: powershell-2.0 directory subdirectory


    【解决方案1】:

    我实际上能够自己解决这个问题。我添加了一个foreach 循环来处理子目录的每个子项并删除旧文件夹。

    这是修改后的脚本:

    $Today = Get-Date
    $DaysToKeep = 14
    $TargetFolder = "E:\WebDelivery\testdir"
    $LastWrite = $Today.AddDays(-$DaysToKeep)
    $excludeFolders = @("testdir","testdir2")
    
    $Folders = Get-Childitem –path $Targetfolder |
    Where {$_.psIsContainer} |
    Where {$excludeFolders -notcontains $_.Name}
    
    If ($Folders) {
     foreach ($Folder in $Folders) {
            Write-Host "Processing Folder $($Folder.Name)"
            $items = Get-ChildItem -Path $Folder.FullName -Exclude 
    "upd.info.raf" | Where {$_.LastWriteTime -le "$LastWrite"} 
            If ($items) {
          foreach ($item in $items){
            Write-Host "Removing: $($item.FullName)"
            $item | Remove-Item -Recurse -Verbose
            } 
    
            } Else {
                Write-Host "There are no items to remove in $($Folder.Name)"
            }
      }  
    }  Else {
    Write-Host "There are no folders to empty."
    

    【讨论】:

      猜你喜欢
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2014-01-08
      • 2013-01-07
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多