Como Substituir um Texto em um Arquivo Usando PowerShell
-
Usar
Get-Content
eSet-Content
para Substituir Cada Ocorrência de uma String em um Arquivo com PowerShell -
Usar a Classe
File
para Substituir Cada Ocorrência de uma String em um Arquivo com PowerShell - Substituir Cada Ocorrência de uma String em Múltiplos Arquivos com PowerShell
- Conclusão

O PowerShell é uma ferramenta poderosa para gerenciar arquivos e pastas. Ele permite criar, copiar, excluir, mover, renomear e visualizar arquivos e pastas no sistema.
Este tutorial irá apresentar diferentes métodos para substituir cada ocorrência de uma string em um arquivo com PowerShell.
Usar Get-Content
e Set-Content
para Substituir Cada Ocorrência de uma String em um Arquivo com PowerShell
O comando 'Get-Content'
recupera o conteúdo de um item no caminho fornecido, como o texto em um arquivo. O cmdlet 'Set-Content'
é uma ferramenta de processamento de strings que permite adicionar novo conteúdo a um arquivo ou substituir o conteúdo existente.
Você pode usar o cmdlet Get-Content
e Set-Content
para substituir cada ocorrência de uma string em um arquivo.
Sintaxe:
(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'
Na sintaxe, substituímos 'OldString'
pela string que queremos substituir e 'NewString'
pela string que queremos colocar em seu lugar. Certifique-se de substituir 'Path\to\Your\File.txt'
pelo caminho real do seu arquivo.
Vamos dar um exemplo. Temos um arquivo de texto (test.txt
) no diretório (C:\New
) com o seguinte conteúdo.
Get-Content C:\New\test.txt
Saída:
Welcome to Linux tutorials.
Linux is free.
Linux is powerful.
Agora, vamos substituir cada ocorrência da string 'Linux'
por 'PowerShell'
em um arquivo test.txt
com a ajuda do parâmetro -Replace
. Os parênteses ()
são necessários ao redor do Get-Content
.
(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
Em seguida, visualize o conteúdo de um arquivo test.txt
para verificar as alterações.
Get-Content C:\New\test.txt
Como você pode ver, Linux
foi substituído com sucesso por PowerShell
.
Saída:
Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.
Este método usa um array de strings para encontrar e substituir strings em um arquivo, pois o cmdlet Get-Content
retorna um array. É mais fácil substituir strings se o Get-Content
retornar uma única string.
Podemos usar o parâmetro -Raw
, como mostrado abaixo. O parâmetro -Raw
é usado para garantir que o conteúdo de 'C:\New\test.txt'
seja lido como uma única string, permitindo a substituição eficiente de 'Linux'
por 'PowerShell'
em todo o arquivo.
(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
Neste código, lemos o conteúdo de um arquivo localizado em 'C:\New\test.txt'
como uma única string. Em seguida, usamos o operador -Replace
para encontrar e substituir todas as ocorrências de 'Linux'
por 'PowerShell'
dentro dessa string.
Finalmente, salvamos o conteúdo modificado de volta no mesmo arquivo, atualizando-o efetivamente com o novo texto. Este código é uma maneira direta de realizar substituições de texto em um arquivo usando PowerShell.
Usar a Classe File
para Substituir Cada Ocorrência de uma String em um Arquivo com PowerShell
A classe File
fornece métodos estáticos para operações comuns, como criar, copiar, mover, abrir, excluir e anexar a um único arquivo. Use o método Replace()
da classe File
para substituir o conteúdo de um arquivo especificado.
Sintaxe:
$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)
Parâmetros:
"FilePath"
: Isso deve ser substituído pelo caminho real do arquivo."OldString"
: Esta é a string que você deseja substituir."NewString"
: Esta é a string que você deseja colocar em seu lugar.
O método ReadAllText()
abre um arquivo de texto, lê todo o texto nesse arquivo e, em seguida, fecha o arquivo.
O método WriteAllText()
cria um novo arquivo, escreve a string específica no arquivo e fecha o arquivo. Ele é sobrescrito se o arquivo de destino já existir na localização.
Vamos dar um exemplo. Temos um arquivo de texto (python.txt
) no diretório (C:\New
) com o seguinte conteúdo.
Get-Content C:\New\python.txt
Saída:
Find the best Python tutorials and learn Python easily from DelftStack.
Agora, vamos substituir cada ocorrência de uma string em um arquivo usando o método da classe File
.
$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python", "JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)
No código acima, começamos criando uma variável chamada $string
, que armazenará o conteúdo modificado do arquivo 'C:\New\python.txt'
após realizar a substituição de texto. Usando [System.IO.File]::ReadAllText("C:\New\python.txt")
, lemos todo o conteúdo do arquivo e salvamos em $string
.
No passo seguinte, usamos o método Replace()
para localizar todas as instâncias de "Python"
dentro do conteúdo e substituí-las por "JavaScript"
, atualizando efetivamente o texto. Finalmente, usamos [System.IO.File]::WriteAllText("C:\New\python.txt", $string)
para escrever o conteúdo modificado de volta no mesmo arquivo, sobrescrevendo o texto original e preservando nossas alterações.
Verifique as alterações feitas em C:\New\python.txt
.
Get-Content C:\New\python.txt
Saída:
Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.
Na saída, podemos ver que "Python"
foi substituído pela palavra "JavaScript"
.
Substituir Cada Ocorrência de uma String em Múltiplos Arquivos com PowerShell
Os métodos acima substituem uma string em um único arquivo. Às vezes, você pode precisar substituir a mesma string em vários arquivos.
Nesse caso, você pode usar o comando abaixo para substituir cada ocorrência de uma string especificada em múltiplos arquivos.
Get-ChildItem 'C:\New\*.txt' | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
No código acima, começamos usando Get-ChildItem
para coletar uma lista de arquivos '.txt'
no diretório 'C:\New'
. O caractere curinga asterisco *
especifica todos os arquivos com a extensão de nome de arquivo .txt
.
Em seguida, fazemos um loop por cada arquivo, lemos seu conteúdo com Get-Content
, e aplicamos uma operação de substituição, mudando 'weekly'
para 'monthly'
, usando o operador -Replace
. O conteúdo modificado é então escrito de volta no mesmo arquivo com Set-Content
.
Esse processo se repete para cada arquivo no diretório, substituindo eficientemente 'weekly'
por 'monthly'
em múltiplos arquivos.
Nós também podemos usar o parâmetro -Recurse
para substituir uma string em arquivos no diretório especificado e em seus subdiretórios.
Get-ChildItem 'C:\New\*.txt' -Recurse | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
Neste código, começamos usando Get-ChildItem
para montar uma lista de arquivos '.txt'
dentro de 'C:\New'
e seus subdiretórios. A opção -Recurse
garante que buscamos esses arquivos não apenas no diretório especificado, mas também em seus subdiretórios.
Em seguida, usamos um par de loops ForEach
para acessar o conteúdo de cada arquivo. Dentro do loop interno, usamos o operador -Replace
para substituir 'weekly'
por 'monthly'
no texto.
Por fim, salvamos o conteúdo ajustado de volta no mesmo arquivo. Este processo percorre todos os arquivos em 'C:\New'
e suas subpastas, permitindo substituir efetivamente 'weekly'
por 'monthly'
em vários arquivos e diretórios aninhados.
Conclusão
Neste artigo, analisamos diferentes maneiras de substituir strings em um único arquivo usando os cmdlets Get-Content
e Set-Content
, oferecendo tanto um método básico quanto um método mais eficiente com o parâmetro -Raw
. Subsequentemente, utilizamos o poder da classe File
para substituir texto dentro de arquivos, demonstrando uma técnica mais avançada.
Além disso, ampliamos nosso conhecimento substituindo texto em vários arquivos em um diretório e seus subdiretórios. Esses métodos facilitam a edição de texto em seus arquivos e mostram quão útil o PowerShell pode ser para tarefas como esta.
Artigo relacionado - PowerShell String
- Array de Strings em PowerShell
- Como Converter um Objeto de Array em uma String no PowerShell
- Como Converter uma String Segura em Texto Simples no PowerShell
- Como Encontrar a Posição de uma Substring no PowerShell
- Como Escapar Aspas Simples e Aspas Duplas no PowerShell
- Como Extrair uma Substring do PowerShell de uma String