none
Ordner löschen RRS feed

  • Frage

  • Hallo Zusammen

    Ich möchte ein Script schreiben, welchem man einen Pfad mitgeben kann. Dieses Script soll dann alle Ordner löschen, welche leer sind. Die Schwierigkeit dabei ist, dass man zu unterst in der Baumstruktur anfangen muss und sich dann hocharbeiten muss. Wenn ich also einen Ordner lösche, will ich im Verzeichnisbaum eine Stufe weiter rauf, und dort überprüfen, ob nun dieser Ordner leer geworden ist.

    Ich habe bereits ein bisschan angefangen, aber da ich die PowerShell kaum kenne, habe ich ansich keine Chance:/

     

    Get-ChildItem 'pfad' -Recurse | 
      Where-Object { $_.PSIsContainer } |
      Where-Object { $_.GetFiles().Count -eq 0 } |
      Where-Object { $_.GetDirectories().Count -eq 0 } |
      ForEach-Object {
        echo $_.FullName >> file1  }
      
    foreach ($i in cat file1)
    {
      object= Get-ChildItem $i
      echo $object | Split-Path -parent
      
      Remove-Item $i
      while($parent -ne 'pfad')
      {
        $parentobject= Get-ChildItem '$parent'
        echo $parentobject.FullName
        if($parentobject.GetFiles().Count -eq 0 )
        {
          if($parentobject.GetDirectories().Count -eq 0 )
          {
            Remove-Item $parentobject
          }
        }
        $parent=$parent | Split-Path -parent
      }  
    }
    

    Wie gesagt, das ist nur ein Beispiel mit einem Mix aus PseudoCode und Powershell. Es funktioniert an verschiedenen Stellen nicht wirklich, ist nur mal so ein Gedankengang.

     

    Grüsse

    Dienstag, 21. Dezember 2010 11:18

Antworten

  • okay, ich habs selber hingekriegt. Falls mal jemand etwas in diese Richtung sucht, hier der Code:

     

    if(Test-Path File1)
    {
      Remove-Item File1
    }
    Get-ChildItem Pfad1 -Recurse | 
      Where-Object { $_.PSIsContainer } |
      Where-Object { $_.GetFiles().Count -eq 0 } |
      Where-Object { $_.GetDirectories().Count -eq 0 } |
      ForEach-Object 
      {
        echo $_.FullName >> File1
      }
    if(Test-Path File1)
    {  
      foreach ($i in cat File1)
      {
        $object= Get-Item $i
        $parent=$object.FullName | Split-Path -parent
      
        Remove-Item $i
        while($parent -ne Pfad1)
        {
          $currentObject= Get-Item $parent    
          if($currentObject.GetFiles().Count -eq 0 -and $currentObject.GetDirectories().Count -eq 0 )
          {  
              $parent=$currentObject.FullName | Split-Path -parent
              Remove-Item $currentObject   
          }
          else
          {
            break
          }
        }  
      }
    }
    Dienstag, 21. Dezember 2010 14:28