Skript zum Löschen von Ordnern und Unterordnern aus einem bestimmten Ordner voller Unterordner

Skript zum Löschen von Ordnern und Unterordnern aus einem bestimmten Ordner voller Unterordner

Ich habe einen Ordner (Benutzer) voller Benutzerordner, den wir für die temporäre Übertragung zwischen Benutzern verwenden. Ich möchte ein Skript planen können, um den Inhalt der Benutzerordner zu leeren, ohne die Benutzerordner zu entfernen oder Berechtigungen zu ändern.

Gibt es eine Möglichkeit, dies über eine Batchdatei zu tun? Ursprünglich dachte ich, ich könnte so etwas verwenden wie:

del /F \Benutzer**.*

Aber das hat nicht funktioniert.

Bitte helfen Sie!

Und danke dir!!

Antwort1

Sie verwenden Server 2012. Es gibt praktisch keinen Grund, Batch zu verwenden.

Hier, haben Sie etwas Powershell:

Foreach($_ In Get-ChildItem C:\Users -Recurse) 
{ 
    If(!$_.PSIsContainer) { Remove-Item $_.Fullname } 
}

Dadurch werden alle Dateien im und unter dem Verzeichnisbaum C:\Users gelöscht, alle Verzeichnisse bleiben jedoch intakt.

Bearbeiten:

Wie wäre es damit:

Foreach($_ In Get-ChildItem C:\Users)
{
    If($_.PSIsContainer)
    {
        Get-ChildItem $_.FullName -Recurse | Remove-Item
    }   
}

Wir erstellen jetzt also eine Liste mit Verzeichnissen der „ersten Ebene“ unter „C:\Users“ und löschen dann rekursiv den Inhalt jedes dieser Ordner, so dass am Ende nur „C:\Users“ und die erste Ebene der Unterverzeichnisse darunter übrig bleiben.

Bearbeiten:Da Sie erwähnt haben, dass Sie dies gerne besser verstehen würden, aber mit Powershell noch nicht vertraut sind, werde ich das obige Skript etwas ausführlicher erläutern.

Get-ChildItem C:\Usersist im Grunde wie C:\> dir C:\Usersin DOS, aber Powershell verarbeitet und gibt alles in Form vonObjekte, nicht nur einfache Konsolenausgabe. Also durch das Lesen der ersten Zeile

Foreach($_ In Get-ChildItem C:\Users)

Das bedeutet, dass wir für jedes „Objekt“, das in C:\Users existiert, eine Schleife durchlaufen. Da wirnichtWenn Sie den -RecurseParameter hier verwenden, gibt Powershell nur die Verzeichnisliste der ersten Ebene von C:\Users zurück und dringt nicht in die Unterverzeichnisse vor.

If($_.PSIsContainer)ist eine If-Anweisung, die bedeutet: „Wenn die Eigenschaft „PSIsContainer“ dieses aktuellen Objekts auf True gesetzt ist, was nur eine elegante Art ist zu sagen „Wenn dies ein Verzeichnis ist“, dann gehe in diese If-Schleife.“

Für jedes Unterverzeichnis unter C:\Usersgeben wir also die If-Schleife ein. Nehmen wir also an, dass C:\Userses drei Unterverzeichnisse gibt: C:\Users\joe, C:\Users\kate, und C:\Users\bill. Diese Unterverzeichnisse können eine beliebige Anzahl von Dateien und Unterverzeichnissen enthalten.

Wir werden die If-Schleife also dreimal aufrufen, sodass es jedes Mal ungefähr so ​​aussieht:

Get-ChildItem <C:\Users\joe> -Recurse | Remove-Item

Get-ChildItem <C:\Users\kate> -Recurse | Remove-Item

Get-ChildItem <C:\Users\bill> -Recurse | Remove-Item

Diese Zeile ruft den Inhalt dieses Unterverzeichnisses ab und der Schalter wird so angegeben, dass er alle Unterverzeichnisse von , , und -Recursedurchsucht .joekatebill

Dann nimmt es alle diese untergeordneten Objekte undRohresie zu , und Sie können sich das als einen schicken Alias ​​für Remove-Itemvorstellen . Es löscht alle Dinge.Remove-Itemdel

Sinn ergeben?

verwandte Informationen