Cómo leer archivos línea por línea en Windows PowerShell
-
Leer archivo línea por línea en PowerShell usando
Get-Content
con un bucleForEach
-
Leer archivo línea por línea en PowerShell usando
Get-Content
conForeach-Object
-
Usar la clase
[System.IO.File]
en PowerShell para leer un archivo línea por línea -
Usar la clase
System.IO.StreamReader
en PowerShell para leer un archivo línea por línea - Conclusión

En Windows PowerShell, podemos usar el cmdlet Get-Content
para leer archivos desde un archivo. Sin embargo, el cmdlet cargará todo el contenido del archivo en la memoria de una vez, lo que fallará o congelará archivos grandes.
Para resolver este problema, lo que podemos hacer es leer los archivos línea por línea, y este artículo te mostrará cómo.
Antes de comenzar, es mejor si creamos un archivo de texto de muestra con múltiples líneas. Por ejemplo, he creado un file.txt
que contiene las siguientes líneas.
file.txt
:
one
two
three
four
five
six
seven
eight
nine
ten
Según Microsoft, una expresión regular es un patrón utilizado para hacer coincidir el texto. Puede estar compuesta de caracteres literales, operadores y otros constructos. Este artículo probará diferentes scripts que involucran una variable estándar llamada Expresiones Regulares, denotada por $regex
.
Leer archivo línea por línea en PowerShell usando Get-Content
con un bucle ForEach
Hemos discutido inicialmente que el cmdlet Get-Content
tiene sus fallos cuando estamos cargando un archivo grande, ya que cargará el contenido del archivo en la memoria de una vez. Sin embargo, podemos mejorarlo cargando las líneas una por una usando el bucle foreach
.
Código de ejemplo:
foreach ($line in Get-Content .\file.txt) {
if ($line -match $regex) {
Write-Output $line
}
}
Aquí hay una explicación paso a paso del proceso:
-
Obtener el contenido del archivo:
Comenzamos utilizando el cmdlet
Get-Content
para leer el contenido del archivo.Get-Content .\file.txt
Reemplaza
"file.txt"
con la ruta a tu archivo. -
Iterar sobre cada línea:
A continuación, usamos un bucle
ForEach
para iterar sobre cada línea en el archivo. El bucle asigna cada línea a una variable,$line
, una a la vez.Dentro del bucle, puedes reemplazar
Write-Host $line
con el código que procesa cada línea según tus requisitos. En este ejemplo, simplemente estamos mostrando cada línea usandoWrite-Host
, pero puedes realizar cualquier acción deseada.
Leer archivo línea por línea en PowerShell usando Get-Content
con Foreach-Object
Para leer un archivo línea por línea en PowerShell utilizando Get-Content
con Foreach-Object
, sigue estos pasos:
-
Usa el cmdlet
Get-Content
:Comenzamos utilizando el cmdlet
Get-Content
para leer el contenido del archivo. El cmdletGet-Content
lee cada línea del archivo y las devuelve como objetos en una canalización.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Reemplaza "example.txt"
con la ruta a tu archivo.
-
Bucle Foreach-Object:
A continuación, usamos el cmdlet
Foreach-Object
(%
es un alias paraForeach-Object
) para iterar sobre cada línea en la canalización. Dentro del bloque de script (el código dentro de{}
), puedes procesar cada línea utilizando$_
, que representa la línea actual que se está procesando.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Dentro de este bucle, puedes realizar cualquier acción que necesites en cada línea.
Ejemplo completo de código funcional
Aquí hay un ejemplo completo de código que lee un archivo línea por línea y muestra cada línea:
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"
}
En este código:
- Especificamos la ruta al archivo utilizando la variable
$filePath
. - Usamos el cmdlet
Test-Path
para verificar si el archivo existe. - Si el archivo existe, usamos
Get-Content
para leer su contenido y pasarlo aForeach-Object
para su procesamiento. - Dentro del bloque de script
Foreach-Object
, usamosWrite-Host $_
para mostrar cada línea.
Usar la clase [System.IO.File]
en PowerShell para leer un archivo línea por línea
Para leer un archivo línea por línea en PowerShell utilizando la clase [System.IO.File]
, sigue estos pasos:
-
Especifica la ruta del archivo:
Comienza especificando la ruta al archivo que deseas leer. Reemplaza
"example.txt"
con la ruta real a tu archivo.powershellCopy code $filePath = "example.txt"
-
Verifica si el archivo existe:
Antes de intentar leer el archivo, es una buena práctica verificar si el archivo existe utilizando el cmdlet
Test-Path
:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Leer el archivo línea por línea:
Una vez que hayas verificado que el archivo existe, puedes usar la clase
[System.IO.File]
para leer el archivo línea por línea. Aquí está el código para hacerlo: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: $_" }
En este código:
- Usamos el método
ReadLines
de la clase[System.IO.File]
para leer el archivo línea por línea, y almacenamos las líneas en la variable$lines
. - Luego usamos un bucle
foreach
para iterar sobre cada línea en$lines
y procesarla. En este ejemplo, simplemente estamos mostrando cada línea usandoWrite-Host
, pero puedes realizar cualquier acción deseada.
- Usamos el método
Ejemplo completo de código funcional
Aquí hay un ejemplo completo de código que lee un archivo línea por línea y muestra cada línea:
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"
}
En este código:
- Especificamos la ruta al archivo utilizando la variable
$filePath
. - Verificamos si el archivo existe utilizando
Test-Path
. - Si el archivo existe, usamos el método
[System.IO.File]::ReadLines()
para leer el archivo línea por línea y procesar cada línea utilizando un bucleforeach
. - Incluimos manejo de errores para capturar cualquier excepción que pueda ocurrir durante la lectura del archivo.
Usar la clase System.IO.StreamReader
en PowerShell para leer un archivo línea por línea
Para leer un archivo línea por línea en PowerShell utilizando la clase System.IO.StreamReader
, sigue estos pasos:
-
Especifica la ruta del archivo:
Comienza especificando la ruta al archivo que deseas leer. Reemplaza
"example.txt"
con la ruta real a tu archivo.powershellCopy code $filePath = "example.txt"
-
Verifica si el archivo existe:
Antes de intentar leer el archivo, es una buena práctica verificar si el archivo existe utilizando el cmdlet
Test-Path
:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Leer el archivo línea por línea:
Una vez que hayas verificado que el archivo existe, puedes usar la clase
System.IO.StreamReader
para leer el archivo línea por línea. Aquí está el código para hacerlo:
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: $_"
}
En este código:
- Creamos una nueva instancia de
System.IO.StreamReader
usando[System.IO.StreamReader]::new($filePath)
, donde$filePath
es la ruta al archivo. - Usamos un bucle
while
para leer el archivo línea por línea. La condición$reader.Peek() -ge 0
asegura que continuemos leyendo hasta que se alcance el final del archivo. - Dentro del bucle, usamos
$reader.ReadLine()
para leer cada línea y procesarla según sea necesario. En este ejemplo, simplemente estamos mostrando cada línea usandoWrite-Host
, pero puedes realizar cualquier acción deseada. - Finalmente, cerramos el
StreamReader
usando$reader.Close()
para liberar los recursos del archivo.
Ejemplo completo de código funcional
Aquí hay un ejemplo completo de código que lee un archivo línea por línea y muestra cada línea:
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"
}
En este código:
- Especificamos la ruta al archivo utilizando la variable
$filePath
. - Verificamos si el archivo existe utilizando
Test-Path
. - Si el archivo existe, creamos una instancia de
System.IO.StreamReader
para leer el archivo línea por línea y procesar cada línea utilizando un buclewhile
. - Incluimos manejo de errores para capturar cualquier excepción que pueda ocurrir durante la lectura del archivo.
Conclusión
En resumen, PowerShell proporciona varios métodos versátiles para leer archivos línea por línea, atendiendo a diversas necesidades de scripting y automatización. Get-Content
con un bucle ForEach es una opción fácil de usar para tareas sencillas, ofreciendo simplicidad y legibilidad. Get-Content
con Foreach-Object
mejora la flexibilidad, haciéndolo adecuado para operaciones más intrincadas y tareas de filtrado dentro de la canalización.
Para escenarios que requieren un mayor control y un manejo de errores completo, la clase [System.IO.File]
ofrece una solución potente. Este método te permite afinar las operaciones con archivos y manejar excepciones de manera adecuada, haciéndolo adecuado para scripts robustos y resistentes a errores.
En situaciones donde estás tratando con archivos grandes y la eficiencia de la memoria es crucial, la clase System.IO.StreamReader
brilla. Te permite leer archivos de manera eficiente mientras gestiona los recursos de memoria de manera más efectiva, asegurando un procesamiento fluido de grandes conjuntos de datos.
En última instancia, la elección del método depende de tus requisitos específicos del script, el tamaño del archivo y la complejidad del procesamiento. Al aprovechar estos métodos, puedes leer archivos línea por línea en PowerShell con confianza, abordando efectivamente una amplia gama de tareas relacionadas con archivos en tus flujos de trabajo de automatización.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedInArtículo relacionado - PowerShell File
- Cómo crear un archivo de texto usando Windows PowerShell
- Cómo obtener la versión del archivo en PowerShell
- Cómo subir archivos con FTP en PowerShell
- Cómo agregar datos a un archivo usando PowerShell
- Cómo almacenar el contenido de un archivo de texto en una variable usando PowerShell
- Consulta de la última hora de escritura del archivo en PowerShell