Verzeichnisse anlegen und löschen in Powershell

Ein Verzeichnis zu erstellen oder zu löschen ist mit cmd.exe und damit in Batch-Dateien eine recht einfache Sache. Powershell dagegen ist ganz allgemein komplizierter, aber auch mächtiger, und so gibt es bei diesen relativ simplen Aufgaben mehr zu bedenken als bei den herkömmlichen Methoden.

Für das Anlegen und Löschen von Verzeichnissen bietet die Powershell 2 Cmdlets, New-Item und Remove-Item. Im Vergleich zu einem einfachen md in der Eingabeaufforderung wirkt der Aufruf von New-Item ziemlich aufwändig:

New-Item -Path briefe -ItemType directory

Ein bisschen Tipparbeit lässt sich sparen, indem man den Namen des Parameters -Path weglässt und den Pfad des neuen Verzeichnisses direkt angibt. Gleichzeitig kann man aber bei Bedarf noch weitere Optionen in Anspruch nehmen, die auch bei anderen Cmdlets zur Verfügung stehen. So lassen sich beim Anlegen eines Verzeichnisses auf einem entfernten Rechner via UNC-Pfad über den Parameter -Credentials die Anmeldedaten eines Benutzers übergeben.

Einfachere Variante über md-Alias

Um die gängigsten Befehle in Powershell kompatibel mit cmd.exe zu gestalten und den Umstieg zu erleichtern, hat Microsoft eine Reihe von Aliases und functions nach dem Vorbild der cmd.exe vordefiniert. Sie dienen als Hülle über den komplexeren Cmdlets. So existiert in Powershell ein Alias namens md, das allerdings auf nicht auf New-Item, sondern auf mkdir verweist, wie der Aufruf

alias md

belegt. Bei mkdir seinerseits handelt es sich um eine vordefinierte und erstaunlich umfangreiche Funktion, wie der Aufruf von

$function:mkdir

zeigt. Das md-Alias auf die mkdir-Funktion lässt es somit zu, ein Verzeichnis genauso zu erstellen wie unter cmd.exe. Allerdings bleiben die erweiterten Optionen des Cmdlets New-Item erhalten, so dass man weiterhin die Parameter -Credentials oder -Verbose angeben kann. Die Powershell-Variante ist übrigens auch in der Lage, mehrere Verzeichnisse auf einmal zu erstellen, wenn man einen längeren Pfad zum Zielverzeichnis angibt.

Verzeichnisse mit Wildcards löschen

Beim Löschen von Verzeichnissen in Powershell verhält es sich ähnlich wie beim Anlegen, jedoch ist der Vorgang etwas einfacher, weil man dem Cmdlet Remove-Item bzw. dem Alias rd nur den Pfad des Verzeichnisses übergeben muss.

Allerdings bestehen auch hier fortgeschrittene Möglichkeiten, die über den rd-Befehl von cmd.exe hinausgehen. So akzeptiert Remove-Item auch Wildcards in den Pfadangaben, zum Beispiel löscht

rd te*

die Verzeichnisse test und temp.

Die Powershell bietet gleichzeitig die Option, ganze Verzeichnisbäume zu entfernen. Der dafür zuständige Parameter -recurse funktioniert laut Hilfe angeblich nicht ordnungsgemäß. Wird er weggelassen und ein Verzeichnis zum Löschen angegeben, das weitere Verzeichnisse enthält, dann frägt das Cmdlet nach und will den rekursiven Löschvorgang bestätigt haben.

Schreibgeschützte oder versteckte Verzeichnisse lassen sich mit Hilfe der Option -Force ebenfalls eliminieren. Beim Entfernen ganzer Ordnerstrukturen ist es sinn­voll, wenn man den Vorgang erst durch Verwendung des Parameters -WhatIf simuliert.

1 Kommentar

Bild von Johannes Sebald
Johannes Sebald (Besucher) sagt:

Wie immer ein sehr hilfreicher und informativer Artikel. Danke Wolfgang!

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht angezeigt. Wenn mit Ihrer angegebenen Mail-Adresse ein Gravatar verknüpft ist, dann wird dieser neben Ihrem Kommentar eingeblendet.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Zeilen und Absätze werden automatisch erzeugt.
  • Mail-Adressen werden im Seitenquelltext unkenntlich gemacht, um sie vor dem automatischen Erfassen durch Spammer zu schützen.

Weitere Informationen über Formatierungsoptionen