Como Ler Arquivos Linha por Linha no Windows PowerShell
-
Ler Arquivo Linha por Linha no PowerShell Usando
Get-Content
com um LoopForEach
-
Ler Arquivo Linha por Linha no PowerShell Usando
Get-Content
comForeach-Object
-
Usando a Classe
[System.IO.File]
no PowerShell Para Ler Arquivo Linha por Linha -
Usando a Classe
System.IO.StreamReader
no PowerShell Para Ler Arquivo Linha por Linha - Conclusão

No PowerShell do Windows, podemos usar o cmdlet Get-Content
para ler arquivos de um arquivo. No entanto, o cmdlet carregará todo o conteúdo do arquivo na memória de uma vez, o que falhará ou congelará em arquivos grandes.
Para resolver esse problema, o que podemos fazer é ler os arquivos linha por linha, e este artigo mostrará como.
Antes de começarmos, é melhor se criarmos um arquivo de texto de exemplo com várias linhas. Por exemplo, eu criei um file.txt
contendo as seguintes linhas.
file.txt
:
one
two
three
four
five
six
seven
eight
nine
ten
De acordo com a Microsoft, uma expressão regular é um padrão usado para corresponder ao texto. Pode ser composto por caracteres literais, operadores e outras construções. Este artigo vai tentar diferentes scripts envolvendo uma variável padrão chamada Expressões Regulares, denotada por $regex
.
Ler Arquivo Linha por Linha no PowerShell Usando Get-Content
com um Loop ForEach
Discutimos inicialmente que o cmdlet Get-Content
tem suas falhas quando estamos carregando um arquivo grande, pois irá carregar o conteúdo do arquivo na memória de uma só vez. No entanto, podemos melhorá-lo carregando as linhas uma por uma usando o loop foreach
.
Código de Exemplo:
foreach ($line in Get-Content .\file.txt) {
if ($line -match $regex) {
Write-Output $line
}
}
Aqui está uma explicação passo a passo do processo:
-
Obter o Conteúdo do Arquivo:
Começamos usando o cmdlet
Get-Content
para ler o conteúdo do arquivo.Get-Content .\file.txt
Substitua
"file.txt"
pelo caminho do seu arquivo. -
Iterar Sobre Cada Linha:
Em seguida, usamos um loop
ForEach
para iterar sobre cada linha no arquivo. O loop atribui cada linha a uma variável,$line
, uma de cada vez.Dentro do loop, você pode substituir
Write-Host $line
pelo código que processa cada linha conforme suas necessidades. Neste exemplo, estamos simplesmente exibindo cada linha usandoWrite-Host
, mas você pode realizar qualquer ação desejada.
Ler Arquivo Linha por Linha no PowerShell Usando Get-Content
com Foreach-Object
Para ler um arquivo linha por linha no PowerShell usando Get-Content
com Foreach-Object
, siga estes passos:
-
Use o Cmdlet
Get-Content
:Começamos usando o cmdlet
Get-Content
para ler o conteúdo do arquivo. O cmdletGet-Content
lê cada linha do arquivo e as envia como objetos em um pipeline.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Substitua "example.txt"
pelo caminho do seu arquivo.
-
Loop Foreach-Object:
Em seguida, usamos o cmdlet
Foreach-Object
(%
é um alias paraForeach-Object
) para iterar sobre cada linha no pipeline. Dentro do bloco de script (o código dentro de{}
), você pode processar cada linha usando$_
, que representa a linha atual sendo processada.powershellCopy codeGet-Content -Path "example.txt" | ForEach-Object { # Process each line here $_ # $_ represents the current line }
Dentro desse loop, você pode realizar quaisquer ações necessárias em cada linha.
Exemplo de Código Completo Funcional
Aqui está um exemplo completo de código funcional que lê um arquivo linha por linha e exibe cada linha:
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"
}
Neste código:
- Especificamos o caminho para o arquivo usando a variável
$filePath
. - Usamos o cmdlet
Test-Path
para verificar se o arquivo existe. - Se o arquivo existir, usamos
Get-Content
para ler seu conteúdo e passar paraForeach-Object
para processamento. - Dentro do bloco de script do
Foreach-Object
, usamosWrite-Host $_
para exibir cada linha.
Usando a Classe [System.IO.File]
no PowerShell Para Ler Arquivo Linha por Linha
Para ler um arquivo linha por linha no PowerShell usando a classe [System.IO.File]
, siga estes passos:
-
Especifique o Caminho do Arquivo:
Comece especificando o caminho para o arquivo que você deseja ler. Substitua
"example.txt"
pelo caminho real do seu arquivo.powershellCopy code $filePath = "example.txt"
-
Verifique se o Arquivo Existe:
Antes de tentar ler o arquivo, é uma boa prática verificar se o arquivo existe usando o cmdlet
Test-Path
:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Ler o Arquivo Linha Por Linha:
Assim que você verificar que o arquivo existe, pode usar a classe
[System.IO.File]
para ler o arquivo linha por linha. Aqui está o código para fazer isso: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: $_" }
Neste código:
- Usamos o método
ReadLines
da classe[System.IO.File]
para ler o arquivo linha por linha e armazenamos as linhas na variável$lines
. - Em seguida, usamos um loop
foreach
para iterar sobre cada linha em$lines
e processá-la. Neste exemplo, estamos simplesmente exibindo cada linha usandoWrite-Host
, mas você pode realizar qualquer ação desejada.
- Usamos o método
Exemplo de Código Completo Funcional
Aqui está um exemplo completo de código funcional que lê um arquivo linha por linha e exibe cada linha:
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"
}
Neste código:
- Especificamos o caminho para o arquivo usando a variável
$filePath
. - Verificamos se o arquivo existe usando
Test-Path
. - Se o arquivo existir, usamos o método
[System.IO.File]::ReadLines()
para ler o arquivo linha por linha e processar cada linha usando um loopforeach
. - Incluímos tratamento de erros para capturar quaisquer exceções que possam ocorrer durante a leitura do arquivo.
Usando a Classe System.IO.StreamReader
no PowerShell Para Ler Arquivo Linha por Linha
Para ler um arquivo linha por linha no PowerShell usando a classe System.IO.StreamReader
, siga estes passos:
-
Especifique o Caminho do Arquivo:
Comece especificando o caminho para o arquivo que você deseja ler. Substitua
"example.txt"
pelo caminho real do seu arquivo.powershellCopy code $filePath = "example.txt"
-
Verifique se o Arquivo Existe:
Antes de tentar ler o arquivo, é uma boa prática verificar se o arquivo existe usando o cmdlet
Test-Path
:powershellCopy codeif (Test-Path $filePath) { # File exists, proceed with reading } else { Write-Host "File not found: $filePath" }
-
Ler o Arquivo Linha por Linha:
Assim que você verificar que o arquivo existe, pode usar a classe
System.IO.StreamReader
para ler o arquivo linha por linha. Aqui está o código para fazer isso:
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: $_"
}
Neste código:
- Criamos uma nova instância de
System.IO.StreamReader
usando[System.IO.StreamReader]::new($filePath)
, onde$filePath
é o caminho para o arquivo. - Usamos um loop
while
para ler o arquivo linha por linha. A condição$reader.Peek() -ge 0
garante que continuemos lendo até o final do arquivo ser alcançado. - Dentro do loop, usamos
$reader.ReadLine()
para ler cada linha e processá-la conforme necessário. Neste exemplo, estamos simplesmente exibindo cada linha usandoWrite-Host
, mas você pode realizar qualquer ação desejada. - Por fim, fechamos o
StreamReader
usando$reader.Close()
para liberar os recursos do arquivo.
Exemplo de Código Completo Funcional
Aqui está um exemplo completo de código funcional que lê um arquivo linha por linha e exibe cada linha:
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"
}
Neste código:
- Especificamos o caminho para o arquivo usando a variável
$filePath
. - Verificamos se o arquivo existe usando
Test-Path
. - Se o arquivo existir, criamos uma instância de
System.IO.StreamReader
para ler o arquivo linha por linha e processar cada linha usando um loopwhile
. - Incluímos tratamento de erros para capturar quaisquer exceções que possam ocorrer durante a leitura do arquivo.
Conclusão
Em resumo, o PowerShell oferece vários métodos versáteis para ler arquivos linha por linha, atendendo a diversas necessidades de script e automação. Get-Content com um Loop ForEach é uma escolha amigável para tarefas simples, oferecendo simplicidade e legibilidade. Get-Content com Foreach-Object aprimora a flexibilidade, tornando-o adequado para operações mais intrincadas e tarefas de filtragem dentro do pipeline.
Para cenários que exigem maior controle e tratamento abrangente de erros, a classe [System.IO.File]
oferece uma solução poderosa. Este método permite ajustar operações de arquivos e lidar graciosamente com exceções, tornando-o bem-sucedido para scripts robustos e à prova de erros.
Em situações em que você está lidando com arquivos grandes e a eficiência de memória é crucial, a classe System.IO.StreamReader se destaca. Ela permite que você leia arquivos de forma eficiente enquanto gerencia os recursos de memória de maneira mais eficaz, garantindo um processamento suave de grandes conjuntos de dados.
Em última análise, a escolha do método depende de seus requisitos específicos de script, tamanho do arquivo e complexidade do processamento. Ao aproveitar esses métodos, você pode ler arquivos linha por linha no PowerShell, abordando efetivamente uma ampla gama de tarefas relacionadas a arquivos em seus fluxos de trabalho de automação.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedInArtigo relacionado - PowerShell File
- Como Armazenar o Conteúdo de um Arquivo de Texto em Variável Usando PowerShell
- Como criar um arquivo de texto usando o Windows PowerShell
- Como Desbloquear Arquivos Usando PowerShell
- Como encontrar arquivos com extensão no PowerShell
- Como extrair o nome do arquivo de um caminho usando PowerShell
- Como Fazer o Upload de Arquivos com FTP no PowerShell