Cómo reemplazar un texto en un archivo usando PowerShell
-
Usa
Get-Content
ySet-Content
para Reemplazar Cada Ocurrencia de una Cadena en un Archivo con PowerShell -
Usa la Clase
File
para Reemplazar Cada Ocurrencia de una Cadena en un Archivo con PowerShell - Reemplazar Cada Ocurrencia de una Cadena en Múltiples Archivos con PowerShell
- Conclusión

PowerShell es una herramienta poderosa para gestionar archivos y carpetas. Te permite crear, copiar, eliminar, mover, renombrar y ver archivos y carpetas en el sistema.
Este tutorial introducirá diferentes métodos para reemplazar cada ocurrencia de una cadena en un archivo con PowerShell.
Usa Get-Content
y Set-Content
para Reemplazar Cada Ocurrencia de una Cadena en un Archivo con PowerShell
El comando 'Get-Content'
recupera el contenido de un elemento en la ruta suministrada, como el texto en un archivo. El cmdlet 'Set-Content'
es una herramienta de procesamiento de cadenas que te permite añadir nuevo contenido a un archivo o reemplazar contenido existente.
Puedes usar el cmdlet Get-Content
y Set-Content
para reemplazar cada ocurrencia de una cadena en un archivo.
Sintaxis:
(Get-Content -Path 'Path\to\Your\File.txt') -Replace 'OldString', 'NewString' | Set-Content -Path 'Path\to\Your\File.txt'
En la sintaxis, reemplazamos 'OldString'
con la cadena que queremos reemplazar y 'NewString'
con la cadena que queremos poner en su lugar. Asegúrate de reemplazar 'Path\to\Your\File.txt'
con la ruta real a tu archivo.
Demos un ejemplo. Tenemos un archivo de texto (test.txt
) en el directorio (C:\New
) con el siguiente contenido.
Get-Content C:\New\test.txt
Salida:
Welcome to Linux tutorials.
Linux is free.
Linux is powerful.
Ahora, vamos a reemplazar cada ocurrencia de la cadena 'Linux'
con 'PowerShell'
en un archivo test.txt
con la ayuda del parámetro -Replace
. Los paréntesis ()
son necesarios alrededor de Get-Content
.
(Get-Content C:\New\test.txt) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
Luego, visualiza el contenido de un archivo test.txt
para verificar los cambios.
Get-Content C:\New\test.txt
Como puedes ver, Linux
ha sido reemplazado con éxito por PowerShell
.
Salida:
Welcome to PowerShell tutorials.
PowerShell is free.
PowerShell is powerful.
Este método utiliza un arreglo de cadenas para encontrar y reemplazar cadenas en un archivo porque el cmdlet Get-Content
devuelve un arreglo. Es más fácil reemplazar cadenas si Get-Content
devuelve una única cadena.
Podemos usar el parámetro -Raw
como se muestra a continuación. El parámetro -Raw
se usa para asegurar que el contenido de 'C:\New\test.txt'
se lea como una única cadena, permitiendo un reemplazo eficiente de 'Linux'
con 'PowerShell'
a lo largo de todo el archivo.
(Get-Content C:\New\test.txt -Raw) -Replace 'Linux', 'PowerShell' | Set-Content C:\New\test.txt
En este código, leemos el contenido de un archivo ubicado en 'C:\New\test.txt'
como una única cadena. Luego, usamos el operador -Replace
para encontrar y reemplazar todas las ocurrencias de 'Linux'
con 'PowerShell'
dentro de esa cadena.
Finalmente, guardamos el contenido modificado de vuelta en el mismo archivo, actualizándolo efectivamente con el nuevo texto. Este código es una manera sencilla de llevar a cabo reemplazos de texto en un archivo utilizando PowerShell.
Usa la Clase File
para Reemplazar Cada Ocurrencia de una Cadena en un Archivo con PowerShell
La clase File
proporciona métodos estáticos para operaciones comunes como crear, copiar, mover, abrir, eliminar y añadir a un único archivo. Usa el método Replace()
de la clase File
para reemplazar el contenido de un archivo específico.
Sintaxis:
$string = [System.IO.File]::ReadAllText("FilePath")
$string = $string.Replace("OldString", "NewString")
[System.IO.File]::WriteAllText("FilePath", $string)
Parámetros:
"FilePath"
: Esto debe ser reemplazado con la ruta real del archivo."OldString"
: Esta es la cadena que deseas reemplazar."NewString"
: Esta es la cadena con la que deseas reemplazarla.
El método ReadAllText()
abre un archivo de texto, lee todo el texto en ese archivo y luego cierra el archivo.
El método WriteAllText()
crea un nuevo archivo, escribe la cadena específica en el archivo y cierra el archivo. Se sobreescribe si el archivo de destino ya existe en la ubicación.
Demos un ejemplo. Tenemos un archivo de texto (python.txt
) en el directorio (C:\New
) con el siguiente contenido.
Get-Content C:\New\python.txt
Salida:
Find the best Python tutorials and learn Python easily from DelftStack.
Ahora, vamos a reemplazar cada ocurrencia de una cadena en un archivo utilizando el método de la clase File
.
$string = [System.IO.File]::ReadAllText("C:\New\python.txt").Replace("Python", "JavaScript")
[System.IO.File]::WriteAllText("C:\New\python.txt", $string)
En el código anterior, comenzamos creando una variable llamada $string
, que almacenará el contenido modificado del archivo 'C:\New\python.txt'
después de realizar el reemplazo de texto. Usando [System.IO.File]::ReadAllText("C:\New\python.txt")
, leemos el contenido completo del archivo y lo guardamos en $string
.
En el siguiente paso, usamos el método Replace()
para localizar todas las instancias de "Python"
dentro del contenido y reemplazarlas por "JavaScript"
, actualizando efectivamente el texto. Finalmente, usamos [System.IO.File]::WriteAllText("C:\New\python.txt", $string)
para escribir el contenido modificado de vuelta en el mismo archivo, sobreescribiendo el texto original y preservando nuestros cambios.
Verifica los cambios realizados en C:\New\python.txt
.
Get-Content C:\New\python.txt
Salida:
Find the best JavaScript tutorials and learn JavaScript easily from DelftStack.
En la salida, podemos ver que "Python"
fue reemplazado por la palabra "JavaScript"
.
Reemplazar Cada Ocurrencia de una Cadena en Múltiples Archivos con PowerShell
Los métodos anteriores reemplazan una cadena en un único archivo. A veces, podrías necesitar reemplazar la misma cadena en múltiples archivos.
En ese caso, puedes usar el comando a continuación para reemplazar cada ocurrencia de una cadena específica en múltiples archivos.
Get-ChildItem 'C:\New\*.txt' | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
En el código anterior, comenzamos usando Get-ChildItem
para recoger una lista de archivos '.txt'
en el directorio 'C:\New'
. El asterisco *
especifica todos los archivos con la extensión de nombre de archivo .txt
.
Luego, recorremos cada archivo, leemos su contenido con Get-Content
y aplicamos una operación de reemplazo, cambiando 'weekly'
a 'monthly'
, utilizando el operador -Replace
. El contenido modificado se escribe de nuevo en el mismo archivo con Set-Content
.
Este proceso se repite para cada archivo en el directorio, reemplazando eficientemente 'weekly'
con 'monthly'
en múltiples archivos.
También podemos usar el parámetro -Recurse
para reemplazar una cadena en archivos en el directorio especificado y sus subdirectorios.
Get-ChildItem 'C:\New\*.txt' -Recurse | foreach {
(Get-Content $_) | foreach { $_ -Replace 'weekly', 'monthly' } | Set-Content $_
}
En este código, comenzamos usando Get-ChildItem
para ensamblar una lista de archivos '.txt'
dentro de 'C:\New'
y sus subdirectorios. La opción -Recurse
asegura que busquemos estos archivos no solo en el directorio especificado, sino también en sus subdirectorios.
Luego usamos un par de bucles ForEach
para acceder al contenido de cada archivo. Dentro del bucle interno, usamos el operador -Replace
para sustituir 'weekly'
por 'monthly'
en el texto.
Finalmente, guardamos el contenido ajustado de nuevo en el mismo archivo. Este proceso se ejecuta a través de todos los archivos en 'C:\New'
y sus subcarpetas, permitiéndonos reemplazar efectivamente 'weekly'
con 'monthly'
en numerosos archivos y directorios anidados.
Conclusión
En este artículo, hemos examinado diferentes maneras de reemplazar cadenas en un único archivo utilizando los cmdlets Get-Content
y Set-Content
, ofreciendo tanto un método básico como uno más eficiente con el parámetro -Raw
. Posteriormente, aprovechamos el poder de la clase File
para reemplazar texto dentro de archivos, demostrando una técnica más avanzada.
Además, ampliamos nuestro conocimiento al reemplazar texto en múltiples archivos dentro de un directorio y sus subdirectorios. Estos métodos facilitan a las personas editar texto en sus archivos y muestran cuán útil puede ser PowerShell para tareas como esta.