es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Renombrado múltiple de archivos basado en patrones regex + renombrado dentro de archivos basado en nuevos nombres de archivos.

¿Cómo lograr esto? Tengo una carpeta con más de 1000 archivos de código, principalmente xml.
La mayoría de los archivos tienen un patrón común:
abbb
accc
addd

a debe ser reemplazado por z:
zbbb
zccc
zddd

Sin embargo, también hay archivos que no comienzan con a:
efff
ghhh

Entonces, estos nombres simplemente deben ir precedidos por z.
zefff
zghhh

Dentro de los archivos, varios de los nombres de archivo pueden aparecer. Por lo tanto, todos los nombres de archivo originales deben ser reemplazados por los nuevos nombres dentro de los archivos también.
Mi idea fue poner los nombres originales en la columna 1 de una tabla y poner los nuevos nombres en la columna 2 al lado de ellos. Luego, iterar sobre esta tabla y si se encuentra un nombre original dentro de un archivo, que también puede aparecer varias veces en las líneas de código, y reemplazarlo con el nuevo nombre. ¿Algún consejo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puede utilizar una herramienta de cambio de nombre por lotes, como Bulk Rename Utility o PowerShell. Estos son los pasos que puede seguir:

    1. Abra la herramienta de cambio de nombre por lotes y vaya a la carpeta con sus archivos de código.
    2. Utilice la herramienta para cambiar el nombre de todos los archivos que empiezan por “a” reemplazando “a” por “z”.
    3. Utilice la herramienta para cambiar el nombre de todos los archivos restantes agregando “z” al principio del nombre del archivo.
    4. Dentro de la herramienta, cree una tabla con dos columnas: el nombre de archivo original y el nuevo nombre de archivo.
    5. Recorra las entradas en la tabla y utilice una función de búsqueda y reemplazo para reemplazar todas las instancias del nombre de archivo original por el nuevo nombre de archivo dentro de cada archivo.

    En PowerShell, puede utilizar el siguiente comando para cambiar el nombre de todos los archivos que empiezan por “a”:

    Get-ChildItem -Path "C:\Ruta\A\Archivos" -Filter "a*" | Rename-Item -NewName { $_.Name -replace '^a','z' }
    

    Y para cambiar el nombre de todos los archivos restantes agregando “z” al principio del nombre del archivo:

    Get-ChildItem -Path "C:\Ruta\A\Archivos" -Exclude "a*" | Rename-Item -NewName { 'z' + $_.Name }
    

    Para reemplazar todas las instancias del nombre de archivo original por el nuevo nombre de archivo dentro de cada archivo, puede utilizar un script como el siguiente:

    $oldName = "abbb"
    $newName = "zbbb"
    
    Get-ChildItem -Path "C:\Ruta\A\Archivos" -Include "*.xml" -Recurse | ForEach-Object {
        $content = Get-Content -Path $_.FullName
        $newContent = $content -replace $oldName, $newName
        Set-Content -Path $_.FullName -Value $newContent
    }
    

    ¡Espero que esto ayude!

Comments are closed.