HOWTO · PowerShell
PowerShell-Schleife durch Dateien und Ordner
Dieser Artikel veranschaulicht, wie wir ein PowerShell-Skript schreiben können, um Dateien und Ordner zu durchlaufen. Wir werden die Get-ChildItem- und ForEach-Anweisungen verwenden, um verschiedene PowerShell-Skripts zu erstellen.
Auf dieser Seite
Dieser Artikel veranschaulicht, wie wir ein PowerShell-Skript schreiben können, um Dateien und Ordner zu durchlaufen. Wir werden die Anweisungen Get-ChildItem und ForEach verwenden, um verschiedene PowerShell-Skripte zu erstellen. Lassen Sie uns gleich einsteigen.
Durchlaufen Sie Dateien und Ordner mit PowerShell Get-ChildItem
Wir verwenden das PowerShell-Cmdlet Get-ChildItem, um eine Liste von Dateien und Ordnern an einem bestimmten Ort anzuzeigen. Mit dem Attribut -path geben wir den Pfad zum gewünschten Verzeichnis an.
Das Get-ChildItem verwendet ebenfalls gci als Alias.
Wenn wir beispielsweise eine Liste der Dateien und Ordner auf unserem Laufwerk C:/ erhalten möchten, können wir Folgendes ausführen:
Get-ChildItem -Path 'C:\'
Der obige Befehl zeigt nur die Dateien und Ordner im Stammverzeichnis unseres Laufwerks an. Um den Inhalt der untergeordneten Verzeichnisse (Unterordner) zu erhalten, können wir den Parameter -Recurse hinzufügen, wie unten dargestellt.
Get-ChildItem -Path 'C:\' -Recurse
PowerShell zeigt den Inhalt aller Unterordner in unserem Laufwerk an.
Durchlaufen Sie Dateien und Ordner mit der PowerShell Get-ChildItem und ForEach
Wir verwenden die PowerShell-Schleife ForEach, um als jedes Objekt in einer Sammlung von Objekten zu fungieren. Hier ist die allgemeine Struktur bei Verwendung des Get-ChildItem-Cmdlets und der ForEach-Schleife:
Get-ChildItem –Path "C:\" |
Foreach-Object {
#Some action with $_.FullName
}
Sehen wir uns einige Beispielskripts an, die die beiden PowerShell-Dienstprogramme verwenden.
Angenommen, wir möchten alle .csv-Dateien in unserem C:\Users\pc-Ordner löschen. Wie gehen wir vor?
Wie unten dargestellt, können wir das Cmdlet Get-ChildItem und die ForEach-Schleife verwenden, um diese Aufgabe auszuführen.
Get-ChildItem –Path "C:\Users\pc" -Recurse -Filter *.csv
|
Foreach-Object {
Remove-Item $_.FullName -WhatIF
}
Das obige Skript verwendet das PowerShell-Cmdlet Get-ChildItem mit dem Parameter -Recurse, um alle Dateien in unserem Ordner C:\Users\pc abzurufen. Wir verwenden dann den Parameter Filter, um Dateien nur mit der Dateierweiterung .csv abzurufen.
Wir leiten die Ergebnisse an die ForEach-Schleife weiter, wo die Dateien entfernt werden. Da wir unsere Dateien aber nicht löschen wollen, haben wir den Parameter -WhatIf hinzugefügt. Unten ist die Ausgabe des obigen Skripts.
Unser Skript hat sechs Dateien mit der Dateierweiterung .csv gefunden. Die Dateien wurden noch nicht gelöscht, da wir den Parameter -WhatIf verwendet haben.
Wir können auch ein Skript erstellen, das Dateien löscht, die älter als ein bestimmtes Datum sind. Dies kann nützlich sein, wenn Sie temporäre Protokolldateien von unserem System bereinigen.
Nachfolgend finden Sie ein Beispielskript, das Dateien in unserem Verzeichnis pc löscht, die älter als 7 Tage sind.
Get-ChildItem C:\Users\pc\ -Recurse
|
Where-Object { $_.CreationTime -lt ($(Get-Date).AddDays(-7))} |
ForEach-Object { remove-Item $_.FullName –whatif }
Dieses Get-ChildItem mit dem Recurse-Parameter holt alle Dateien in unserem pc-Ordner und fügt sie in unsere ForEach-Schleife ein. Die Schleife löscht alle Dateien, die älter als sieben Tage sind.
Da wir die Dateien in unserem Ordner nicht abschaffen wollen, haben wir den Parameter -WhatIf hinzugefügt.
Zusammenfassend können wir die PowerShell Get-ChildItem und die ForEach-Schleife verwenden, um Skripte zu erstellen, die Dateien und Ordner durchlaufen.
Die ForEach-Schleife führt eine bestimmte Aktion für alle Dateien aus, die vom Get-ChildItem-Cmdlet heruntergeleitet werden. Es gibt verschiedene Möglichkeiten, wie wir die beiden PowerShell-Dienstprogramme verwenden können.