2016-04-19 9 views
0

Ich habe eine Reihe von VerzeichnissenSuche mehrere Ordner zu überprüfen, ob sie leer sind mithilfe von Powershell

C: \ RI1

C: \ RI2

C: \ RI3

.. . C: \ RI21

Wie kann ich überprüfen, ob sie alle leer sind? Ich möchte nur weiter in das Skript gehen, wenn eines oder mehrere von ihnen Dateien haben. Wenn nicht, möchte ich beenden. Ich habe versucht, dies ist aber für Ordnernamen gesucht und gibt mir 21 als Antwort

$directoryInfo = Get-ChildItem C:\RI* | Measure-Object 
$directoryInfo.count 

if ($directoryInfo.count -eq 0) 
{ 

    Write-host "Empty" 
} 

else 
{ 
    Write-host "Not Empty" 
} 

Antwort

1

Wenn Sie Get-ChildItem C:\RI* laufen Sie alle untergeordneten Elemente in C erhalten: \ und filtern Sie die Ergebnisse mit Gegenständen, die mit „RI beginnen ". Sie erhalten die Antwort 21, da es in C: \ 21 Ordner gibt, die mit "RI" beginnen.

Ich schlage vor, dass Sie die alle Ordner durchlaufen eine foreach Schleife.

$folders = @("RI1", "RI2", "RI3") 

foreach ($folder in $folders) 
{ 
    $path = "C:\$folder" 
    $directoryInfo = Get-ChildItem $path 
    if ($directoryInfo.count -eq 0) 
    { 
     Write-Host "Empty" 
    } 
    else 
    { 
     Write-Host "Not Empty" 
    } 
} 
+0

Problem ist, können sie weitere Ordner hinzufügen und die Ordner hinzugefügt wird nicht in unseren Händen. Alles was wir wissen ist, dass es mit RI beginnen würde. Gibt es eine Möglichkeit, die Schleife mithilfe eines Platzhalters auszuführen, ohne den Ordnernamen explizit anzugeben? –

+1

Dann müssen Sie auch alle Ordner in C: \, wo der Name Ihren Anforderungen entspricht. '$ folders = Get-ChildItem C: \ | ? {$ _. PSIsContainer} | wo {$ _. name.StartsWith ("RI")} ' – David

+0

Wow - Wenn das der einzige Weg ist, muss ich denken, dass ich verloren bin. Benötigt viel Zeit für die Ausführung des Skripts. Vielen Dank für die Hilfe David! –

Verwandte Themen