Wie man Dateien Zeile für Zeile in Windows PowerShell liest
-
Datei zeilenweise in PowerShell lesen mit
Get-Content
und einerForEach
-Schleife -
Datei zeilenweise in PowerShell lesen mit
Get-Content
undForeach-Object
-
Verwendung der
[System.IO.File]
-Klasse in PowerShell zum zeilenweisen Lesen einer Datei -
Verwendung der
System.IO.StreamReader
-Klasse in PowerShell zum zeilenweisen Lesen einer Datei - Fazit

In Windows PowerShell können wir das Cmdlet Get-Content
verwenden, um Dateien aus einer Datei zu lesen. Das Cmdlet lädt jedoch den gesamten Dateinhalt auf einmal in den Speicher, was bei großen Dateien fehlschlägt oder einfriert.
Um dieses Problem zu lösen, können wir die Dateien zeilenweise lesen, und dieser Artikel zeigt Ihnen, wie.
Bevor wir anfangen, ist es besser, wenn wir eine Beispieldatei mit mehreren Zeilen erstellen. Zum Beispiel habe ich eine file.txt
erstellt, die die folgenden Zeilen enthält.
file.txt
:
one
two
three
four
five
six
seven
eight
nine
ten
Laut Microsoft ist ein regulärer Ausdruck ein Muster, das zum Abgleichen von Text verwendet wird. Er kann aus litera len Zeichen, Operatoren und anderen Konstrukten bestehen. Dieser Artikel wird verschiedene Skripte ausprobieren, die eine Standardvariable namens reguläre Ausdrücke verwenden, die mit $regex
bezeichnet wird.
Datei zeilenweise in PowerShell lesen mit Get-Content
und einer ForEach
-Schleife
Wir haben zunächst besprochen, dass das Cmdlet Get-Content
seine Mängel hat, wenn wir eine große Datei laden, da es die Inhalte der Datei auf einmal in den Speicher lädt. Wir können dies jedoch verbessern, indem wir die Zeilen einzeln mit der foreach
-Schleife laden.
Beispielcode:
foreach ($line in Get-Content .\file.txt) {
if ($line -match $regex) {
Write-Output $line
}
}
Hier ist eine Schritt-für-Schritt-Erklärung des Prozesses:
-
Dateiinhalt abrufen:
Wir beginnen mit dem
Get-Content
Cmdlet, um den Inhalt der Datei zu lesen.Get-Content .\file.txt
Ersetzen Sie
"file.txt"
durch den Pfad zu Ihrer Datei. -
Über jede Zeile iterieren:
Als nächstes verwenden wir eine
ForEach
-Schleife, um über jede Zeile in der Datei zu iterieren. Die Schleife weist jeder Zeile nacheinander eine Variable$line
zu.Innerhalb der Schleife können Sie
Write-Host $line
durch den Code ersetzen, der jede Zeile gemäß Ihren Anforderungen verarbeitet. In diesem Beispiel zeigen wir einfach jede Zeile mitWrite-Host
an, aber Sie können beliebige gewünschte Aktionen durchführen.
Datei zeilenweise in PowerShell lesen mit Get-Content
und Foreach-Object
Um eine Datei zeilenweise in PowerShell mit Get-Content
und Foreach-Object
zu lesen, befolgen Sie diese Schritte:
-
Verwenden Sie das
Get-Content
Cmdlet:Wir beginnen mit dem
Get-Content
Cmdlet, um den Inhalt der Datei zu lesen. DasGet-Content
Cmdlet liest jede Zeile der Datei und gibt sie als Objekte in einer Pipeline aus.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Ersetzen Sie "example.txt"
durch den Pfad zu Ihrer Datei.
-
Foreach-Object-Schleife:
Als nächstes verwenden wir das Cmdlet
Foreach-Object
(%
ist ein Alias fürForeach-Object
), um über jede Zeile in der Pipeline zu iterieren. Innerhalb des Skriptblocks (der Code innerhalb der{}
) können Sie jede Zeile mit$_
verarbeiten, das die aktuelle, bearbeitete Zeile darstellt.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Innerhalb dieser Schleife können Sie beliebige Aktionen durchführen, die Sie für jede Zeile benötigen.
Vollständiges funktionsfähiges Codebeispiel
Hier ist ein vollständiges funktionsfähiges Codebeispiel, das eine Datei zeilenweise liest und jede Zeile anzeigt:
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
# Read the file line by line and process each line
Get-Content -Path $filePath | ForEach-Object {
# Process each line here
Write-Host $_
}
} else {
Write-Host "File not found: $filePath"
}
In diesem Code:
- Wir geben den Pfad zur Datei mit der Variablen
$filePath
an. - Wir verwenden das Cmdlet
Test-Path
, um zu überprüfen, ob die Datei existiert. - Wenn die Datei existiert, verwenden wir
Get-Content
, um ihren Inhalt zu lesen und ihn zur Verarbeitung anForeach-Object
weiterzugeben. - Innerhalb des Skriptblocks von
Foreach-Object
verwenden wirWrite-Host $_
, um jede Zeile anzuzeigen.
Verwendung der [System.IO.File]
-Klasse in PowerShell zum zeilenweisen Lesen einer Datei
Um eine Datei zeilenweise in PowerShell mit der [System.IO.File]
-Klasse zu lesen, befolgen Sie diese Schritte:
-
Geben Sie den Dateipfad an:
Beginnen Sie damit, den Pfad zur Datei anzugeben, die Sie lesen möchten. Ersetzen Sie
"example.txt"
durch den tatsächlichen Pfad zu Ihrer Datei.powershellCopy code $filePath = "example.txt"
-
Überprüfen Sie, ob die Datei existiert:
Bevor Sie versuchen, die Datei zu lesen, ist es eine gute Praxis, mit dem Cmdlet
Test-Path
zu überprüfen, ob die Datei existiert:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Lesen Sie die Datei zeilenweise:
Sobald Sie sich vergewissert haben, dass die Datei existiert, können Sie die
[System.IO.File]
-Klasse verwenden, um die Datei zeilenweise zu lesen. Hier ist der Code dafür:powershellCopy codetry { $lines = [System.IO.File]::ReadLines($filePath) foreach ($line in $lines) { # Process each line here Write-Host $line } } catch { Write-Host "Error reading the file: $_" }
In diesem Code:
- Wir verwenden die Methode
ReadLines
der[System.IO.File]
-Klasse, um die Datei zeilenweise zu lesen, und speichern die Zeilen in der Variablen$lines
. - Wir verwenden dann eine
foreach
-Schleife, um über jede Zeile in$lines
zu iterieren und sie zu verarbeiten. In diesem Beispiel zeigen wir einfach jede Zeile mitWrite-Host
an, aber Sie können beliebige gewünschte Aktionen durchführen.
- Wir verwenden die Methode
Vollständiges funktionsfähiges Codebeispiel
Hier ist ein vollständiges funktionsfähiges Codebeispiel, das eine Datei zeilenweise liest und jede Zeile anzeigt:
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
try {
# Read the file line by line
$lines = [System.IO.File]::ReadLines($filePath)
foreach ($line in $lines) {
# Process each line here
Write-Host $line
}
} catch {
Write-Host "Error reading the file: $_"
}
} else {
Write-Host "File not found: $filePath"
}
In diesem Code:
- Wir geben den Pfad zur Datei mit der Variablen
$filePath
an. - Wir überprüfen, ob die Datei mit
Test-Path
existiert. - Wenn die Datei existiert, verwenden wir die Methode
[System.IO.File]::ReadLines()
, um die Datei zeilenweise zu lesen und jede Zeile mit einerforeach
-Schleife zu verarbeiten. - Wir fügen eine Fehlerbehandlung hinzu, um eventuelle Ausnahmen während des Lesens der Datei abzufangen.
Verwendung der System.IO.StreamReader
-Klasse in PowerShell zum zeilenweisen Lesen einer Datei
Um eine Datei zeilenweise in PowerShell mit der System.IO.StreamReader
-Klasse zu lesen, befolgen Sie diese Schritte:
-
Geben Sie den Dateipfad an:
Beginnen Sie damit, den Pfad zur Datei anzugeben, die Sie lesen möchten. Ersetzen Sie
"example.txt"
durch den tatsächlichen Pfad zu Ihrer Datei.powershellCopy code $filePath = "example.txt"
-
Überprüfen Sie, ob die Datei existiert:
Bevor Sie versuchen, die Datei zu lesen, ist es eine gute Praxis, mit dem Cmdlet
Test-Path
zu überprüfen, ob die Datei existiert:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Lesen Sie die Datei zeilenweise:
Sobald Sie sich vergewissert haben, dass die Datei existiert, können Sie die
System.IO.StreamReader
-Klasse verwenden, um die Datei zeilenweise zu lesen. Hier ist der Code dafür:
powershellCopy codetry {
$reader = [System.IO.StreamReader]::new($filePath)
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine()
# Process each line here
Write-Host $line
}
$reader.Close()
} catch {
Write-Host "Error reading the file: $_"
}
In diesem Code:
- Wir erstellen eine neue Instanz von
System.IO.StreamReader
mit[System.IO.StreamReader]::new($filePath)
, wobei$filePath
der Pfad zur Datei ist. - Wir verwenden eine
while
-Schleife, um die Datei zeilenweise zu lesen. Die Bedingung$reader.Peek() -ge 0
stellt sicher, dass wir weiter lesen, bis das Ende der Datei erreicht ist. - Innerhalb der Schleife verwenden wir
$reader.ReadLine()
, um jede Zeile zu lesen und sie nach Bedarf zu verarbeiten. In diesem Beispiel zeigen wir einfach jede Zeile mitWrite-Host
an, aber Sie können beliebige gewünschte Aktionen durchführen. - Schließlich schließen wir den
StreamReader
mit$reader.Close()
, um die Dateiresourcen freizugeben.
Vollständiges funktionsfähiges Codebeispiel
Hier ist ein vollständiges funktionsfähiges Codebeispiel, das eine Datei zeilenweise liest und jede Zeile anzeigt:
powershellCopy code# Specify the path to the file
$filePath = "example.txt"
# Check if the file exists
if (Test-Path $filePath) {
try {
# Create a StreamReader to read the file
$reader = [System.IO.StreamReader]::new($filePath)
# Read the file line by line
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine()
# Process each line here
Write-Host $line
}
# Close the StreamReader
$reader.Close()
} catch {
Write-Host "Error reading the file: $_"
}
} else {
Write-Host "File not found: $filePath"
}
In diesem Code:
- Wir geben den Pfad zur Datei mit der Variablen
$filePath
an. - Wir überprüfen, ob die Datei mit
Test-Path
existiert. - Wenn die Datei existiert, erstellen wir eine Instanz von
System.IO.StreamReader
, um die Datei zeilenweise zu lesen und jede Zeile mit einerwhile
-Schleife zu verarbeiten. - Wir fügen eine Fehlerbehandlung hinzu, um eventuelle Ausnahmen während des Lesens der Datei abzufangen.
Fazit
Zusammenfassend bietet PowerShell mehrere vielseitige Methoden zum zeilenweisen Lesen von Dateien, die unterschiedlichen Skript- und Automatisierungsbedürfnissen gerecht werden. Get-Content
mit einer ForEach
-Schleife ist eine benutzerfreundliche Wahl für einfache Aufgaben, die Einfachheit und Lesbarkeit bietet. Get-Content
mit Foreach-Object
verbessert die Flexibilität und eignet sich für komplexere Operationen und Filteraufgaben innerhalb der Pipeline.
Für Szenarien, die mehr Kontrolle und umfassende Fehlerbehandlung erfordern, bietet die [System.IO.File]
-Klasse eine leistungsstarke Lösung. Diese Methode ermöglicht es Ihnen, Dateioperationen fein abzustimmen und Ausnahmen elegant zu behandeln, wodurch sie sich gut für robuste und fehlerresistente Skripte eignet.
In Situationen, in denen Sie es mit großen Dateien zu tun haben und die Speichereffizienz entscheidend ist, glänzt die System.IO.StreamReader
-Klasse. Sie ermöglicht es Ihnen, Dateien effizient zu lesen, während Sie die Speichermittel effektiver verwalten und so eine reibungslose Verarbeitung umfangreicher Datensätze gewährleisten.
Letztendlich hängt die Wahl der Methode von Ihren spezifischen Skriptanforderungen, der Dateigröße und der Komplexität der Verarbeitung ab. Durch die Nutzung dieser Methoden können Sie Dateien in PowerShell zeilenweise lesen und eine Vielzahl von dateibezogenen Aufgaben in Ihren Automatisierungsabläufen effektiv angehen.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedInVerwandter Artikel - PowerShell File
- Wie man Dateien mit FTP in PowerShell hochlädt
- Wie man die Dateiversion in PowerShell erhält
- Wie man eine Textdatei mit Windows PowerShell erstellt
- So fügen Sie Daten mit PowerShell zu einer Datei hinzu
- Abfrage der letzten Schreibzeit der Datei in PowerShell
- CSV-Datei Zeile für Zeile in PowerShell lesen