Come leggere i file riga per riga in Windows PowerShell
-
Leggi il file riga per riga in PowerShell utilizzando
Get-Content
con un cicloForEach
-
Leggi il file riga per riga in PowerShell utilizzando
Get-Content
conForeach-Object
-
Utilizzare la classe
[System.IO.File]
in PowerShell per leggere il file riga per riga -
Utilizzare la classe
System.IO.StreamReader
in PowerShell per leggere il file riga per riga - Conclusione

In Windows PowerShell, possiamo utilizzare il cmdlet Get-Content
per leggere i file. Tuttavia, il cmdlet caricherà il contenuto dell’intero file in memoria tutto in una volta, il che fallirà o si bloccherà con file di grandi dimensioni.
Per risolvere questo problema, possiamo leggere i file riga per riga, e questo articolo ti mostrerà come fare.
Prima di iniziare, è meglio se creiamo un file di testo di esempio con più righe. Ad esempio, ho creato un file.txt
contenente le seguenti righe.
file.txt
:
one
two
three
four
five
six
seven
eight
nine
ten
Secondo Microsoft, un’espressione regolare è un modello utilizzato per abbinare il testo. Può essere composto da caratteri letterali, operatori e altre costruzioni. Questo articolo proverà diversi script che coinvolgono una variabile standard chiamata Espressioni Regolari, denotata da $regex
.
Leggi il file riga per riga in PowerShell utilizzando Get-Content
con un ciclo ForEach
Abbiamo discusso inizialmente che il cmdlet Get-Content
presenta delle lacune quando carichiamo un file di grandi dimensioni, poiché caricherà i contenuti del file in memoria tutto in una volta. Tuttavia, possiamo migliorarlo caricando le righe una alla volta utilizzando il ciclo foreach
.
Codice di esempio:
foreach ($line in Get-Content .\file.txt) {
if ($line -match $regex) {
Write-Output $line
}
}
Ecco una spiegazione passo-passo del processo:
-
Ottieni il contenuto del file:
Iniziamo utilizzando il cmdlet
Get-Content
per leggere i contenuti del file.Get-Content .\file.txt
Sostituisci
"file.txt"
con il percorso del tuo file. -
Itera su ogni riga:
Successivamente, utilizziamo un ciclo
ForEach
per iterare su ogni riga nel file. Il ciclo assegna ogni riga a una variabile,$line
, una alla volta.All’interno del ciclo, puoi sostituire
Write-Host $line
con il codice che elabora ogni riga in base alle tue esigenze. In questo esempio, stiamo semplicemente visualizzando ogni riga utilizzandoWrite-Host
, ma puoi eseguire qualsiasi azione desiderata.
Leggi il file riga per riga in PowerShell utilizzando Get-Content
con Foreach-Object
Per leggere un file riga per riga in PowerShell utilizzando Get-Content
con Foreach-Object
, segui questi passaggi:
-
Usa il cmdlet
Get-Content
:Iniziamo utilizzando il cmdlet
Get-Content
per leggere i contenuti del file. Il cmdletGet-Content
legge ogni riga del file e le restituisce come oggetti in un pipeline.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Sostituisci "example.txt"
con il percorso del tuo file.
-
Ciclo Foreach-Object:
Successivamente, utilizziamo il cmdlet
Foreach-Object
(%
è un alias perForeach-Object
) per iterare su ogni riga nella pipeline. All’interno del blocco di script (il codice all’interno di{}
), puoi elaborare ogni riga utilizzando$_
, che rappresenta la riga corrente in fase di elaborazione.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
All’interno di questo ciclo, puoi eseguire qualsiasi azione necessaria su ciascuna riga.
Esempio completo di codice funzionante
Ecco un esempio completo di codice funzionante che legge un file riga per riga e visualizza ogni riga:
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 questo codice:
- Specifichiamo il percorso del file utilizzando la variabile
$filePath
. - Utilizziamo il cmdlet
Test-Path
per verificare se il file esiste. - Se il file esiste, utilizziamo
Get-Content
per leggere il suo contenuto e passarli aForeach-Object
per l’elaborazione. - All’interno del blocco di script
Foreach-Object
, utilizziamoWrite-Host $_
per visualizzare ogni riga.
Utilizzare la classe [System.IO.File]
in PowerShell per leggere il file riga per riga
Per leggere un file riga per riga in PowerShell utilizzando la classe [System.IO.File]
, segui questi passaggi:
-
Specifica il percorso del file:
Inizia specificando il percorso del file che desideri leggere. Sostituisci
"example.txt"
con il percorso effettivo del tuo file.powershellCopy code $filePath = "example.txt"
-
Controlla se il file esiste:
Prima di tentare di leggere il file, è buona pratica controllare se il file esiste utilizzando il cmdlet
Test-Path
:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Leggi il file riga per riga:
Una volta verificato che il file esiste, puoi utilizzare la classe
[System.IO.File]
per leggere il file riga per riga. Ecco il codice per farlo: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 questo codice:
- Utilizziamo il metodo
ReadLines
della classe[System.IO.File]
per leggere il file riga per riga e memorizziamo le righe nella variabile$lines
. - Quindi utilizziamo un ciclo
foreach
per iterare su ogni riga in$lines
e processarla. In questo esempio, stiamo semplicemente visualizzando ogni riga utilizzandoWrite-Host
, ma puoi eseguire qualsiasi azione desiderata.
- Utilizziamo il metodo
Esempio completo di codice funzionante
Ecco un esempio completo di codice funzionante che legge un file riga per riga e visualizza ogni riga:
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 questo codice:
- Specifichiamo il percorso del file utilizzando la variabile
$filePath
. - Verifichiamo se il file esiste utilizzando
Test-Path
. - Se il file esiste, utilizziamo il metodo
[System.IO.File]::ReadLines()
per leggere il file riga per riga e processare ogni riga utilizzando un cicloforeach
. - Includiamo la gestione degli errori per catturare eventuali eccezioni che potrebbero verificarsi durante la lettura del file.
Utilizzare la classe System.IO.StreamReader
in PowerShell per leggere il file riga per riga
Per leggere un file riga per riga in PowerShell utilizzando la classe System.IO.StreamReader
, segui questi passaggi:
-
Specifica il percorso del file:
Inizia specificando il percorso del file che desideri leggere. Sostituisci
"example.txt"
con il percorso effettivo del tuo file.powershellCopy code $filePath = "example.txt"
-
Controlla se il file esiste:
Prima di tentare di leggere il file, è buona pratica controllare se il file esiste utilizzando il cmdlet
Test-Path
:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Leggi il file riga per riga:
Una volta verificato che il file esiste, puoi utilizzare la classe
System.IO.StreamReader
per leggere il file riga per riga. Ecco il codice per farlo:
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 questo codice:
- Creiamo una nuova istanza di
System.IO.StreamReader
utilizzando[System.IO.StreamReader]::new($filePath)
, dove$filePath
è il percorso del file. - Utilizziamo un ciclo
while
per leggere il file riga per riga. La condizione$reader.Peek() -ge 0
assicura che continuiamo a leggere fino a raggiungere la fine del file. - All’interno del ciclo, utilizziamo
$reader.ReadLine()
per leggere ogni riga e processarla secondo necessità. In questo esempio, stiamo semplicemente visualizzando ogni riga utilizzandoWrite-Host
, ma puoi eseguire qualsiasi azione desiderata. - Infine, chiudiamo lo
StreamReader
utilizzando$reader.Close()
per rilasciare le risorse del file.
Esempio completo di codice funzionante
Ecco un esempio completo di codice funzionante che legge un file riga per riga e visualizza ogni riga:
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 questo codice:
- Specifichiamo il percorso del file utilizzando la variabile
$filePath
. - Verifichiamo se il file esiste utilizzando
Test-Path
. - Se il file esiste, creiamo un’istanza di
System.IO.StreamReader
per leggere il file riga per riga e processare ogni riga utilizzando un ciclowhile
. - Includiamo la gestione degli errori per catturare eventuali eccezioni che potrebbero verificarsi durante la lettura del file.
Conclusione
In sintesi, PowerShell fornisce diversi metodi versatili per leggere i file riga per riga, soddisfacendo esigenze di scripting e automazione diverse. Get-Content
con un ciclo ForEach
è una scelta user-friendly per compiti semplici, offrendo semplicità e leggibilità. Get-Content
con Foreach-Object
migliora la flessibilità, rendendolo adatto a operazioni più complesse e compiti di filtraggio all’interno della pipeline.
Per scenari che richiedono un controllo maggiore e una gestione degli errori completa, la classe [System.IO.File]
offre una soluzione potente. Questo metodo consente di ottimizzare le operazioni sui file e gestire elegantemente le eccezioni, rendendolo adatto per script robusti e resistenti agli errori.
In situazioni in cui stai trattando file di grandi dimensioni e l’efficienza della memoria è cruciale, la classe System.IO.StreamReader
brilla. Ti consente di leggere i file in modo efficiente mentre gestisci le risorse di memoria in modo più efficace, assicurando un’elaborazione fluida di set di dati sostanziali.
In definitiva, la scelta del metodo dipende dai requisiti specifici del tuo script, dalla dimensione del file e dalla complessità dell’elaborazione. Sfruttando questi metodi, puoi leggere con fiducia i file riga per riga in PowerShell, affrontando efficacemente una vasta gamma di attività relative ai file nei tuoi flussi di lavoro di automazione.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedInArticolo correlato - PowerShell File
- Come caricare file con FTP in PowerShell
- Come creare un file di testo utilizzando Windows PowerShell
- Come estrarre il nome del file da un percorso utilizzando PowerShell
- Come memorizzare il contenuto di un file di testo in una variabile utilizzando PowerShell
- Come ottenere il percorso completo dei file in PowerShell