Windows: Cómo renombrar ficheros en lote (incluso en subcarpetas) fácilmente

En más de una ocasión casi seguro que has querido cambiar los nombres de varios ficheros en lote (incluso cientos en diferentes carpetas) en Windows. Esto se puede hacer de manera sencilla e, incluso, si deben cumplir cierto patrón en su nombre en Windows 7, Windows 8/8.1 y Windows 10, se pueden renombrar con un solo comando y en cuestión de pocos segundos (y sin instalar nada y gratis) o con un programa gratuito.

El otro día se me planteó la necesidad de cambiar parte del nombre a cientos de ficheros que estaban distribuidos a lo largo de varias carpetas para cambiar parte de un texto en el nombre por otro.

Tener que ir carpeta por carpeta, habría llevado mucho tiempo. Con un comando les cambié el nombre y lo solucioné en apenas 5 minutos.

Cómo renombrar ficheros en lote o en grupo muy fácilmente

Cómo renombrar ficheros en lote o en grupo muy fácilmente

Cómo cambiar el nombre a muchos ficheros en Windows en grupo o por lote

En Windows es muy fácil cambiar el nombre a varios ficheros a la vez.

No hay más que seleccionarlos todos y pulsar el botón derecho sobre uno de ellos y elegir “Cambiar nombre”:

Seleccionar todos los ficheros y botón derecho > Cambiar nombre

Seleccionar todos los ficheros y botón derecho > Cambiar nombre

Teclear el nombre deseado y pulsar enter.

Poner en uno de ellos (con todos seleccionados) el nombre deseado

Poner en uno de ellos (con todos seleccionados) el nombre deseado

Renombra los ficheros de manera correlativa añadiendo un número entre paréntesis para diferenciarlos.

Ya están todos los ficheros con el mismo nombre y un número diferente

Ya están todos los ficheros con el mismo nombre y un número diferente

Lo malo de este punto es que todos tienen el mismo nombre y extensión (son del mismo tipo).

Si quieres, por ejemplo, que el nombre original se mantenga pero se cambie una parte (por ejemplo, supón que los nombres de los archivos son muy diferentes, de diferentes tipos, pero todos ellos incluyen en el nombre la cadena -textobuscado, por ejemplo, un fichero se llamará presupuesto-2017-textobuscado.docx.

Otro podría ser análisis-financiero-2017-textobuscado.xlsx, por ejemplo, etc.

(Textobuscado podría ser EmpresaGarcía, por ejemplo u otro identificador – ¿eliteTorrent.net?).

Si se aplicase el método anterior, todos pasarían a tener el mismo nombre con un número entre paréntesis de diferencia, lo que sería un problema. Además, con el método explicado en el punto anterior, todos deberían estar en la misma carpeta del ordenador. ¿Y si están en muchas carpetas y subcarpetas? Tiene solución fácil.

Cómo renombrar ficheros en lote (o solo una parte del mismo) según un patrón (incluso en varias subcarpetas)

Supongamos que tienes varios ficheros en distintas carpetas y todos ellos tienen algo en común, por ejemplo, contienen en el nombre del fichero la palabra textobuscado, y se quiere sustituir por textoqueponer.

Los pasos para hacerlo son (se puede hacer en cualquier versión de Windows 7, Windows 8, Windows 10 y posteriores):

  1. Abrir PowerShell (la manera más rápida es dale al botón de inicio y teclea directamente Powershell). Windows PowerShell es un intérprete avanzado de comandos (parecido a MS-DOS pero más potente, disponible a partir de Windows XP Service Pack 2) y aunque da un cierto reparo y rechazo usarlo si no te gustan los comandos, verás cómo es muy fácil de usar. Solo hay que copiar y pegar ahí.
  1. Cambia al directorio donde estén los ficheros, por ejemplo, si están en la carpeta de documentos, teclea “cd documentos” (al escribir docum se puede pulsar la tecla del tabulador y lo autocompleta con el valor correcto). Si está en Documentos subcarpeta trabajos teclea cd documentos\trabajos (por ejemplo).
  1. Teclea (o pega) el comando: Get-ChildItem -Filter «*textobuscado*» -Recurse | Rename-Item -NewName {$_.name -replace «textobuscado»,»textoqueponer» }

(suponiendo que textotextobuscado sea la cadena a buscar, y textoqueponer la que hay que poner). Si no es así, cámbialos por los valores que quieras.

Windows PowerShell para cambiar el nombre en lote a ficheros

Windows PowerShell para cambiar el nombre en lote a ficheros

  1. Pulsa enter y pasados unos segundos, se habrán cambiado todos, tanto de ese directorio, como de los subdirectorios.

Las partes del comando y lo que hacen cada una de ellas, son:

Get-ChildItem -Filter «*textobuscado*»
Busca todos los ficheros que contengan la cadena “textobuscado” en el nombre.

-Recurse
Si se indica este parámetro, el anterior busca de manera recursiva en todos los subdirectorios (subcarpetas) a partir de la ruta actual en la que se encuentra.

 |
Le indica a PowerShell que le pase cada uno de los objetos que encuentra en el primer comando (Get-ChildItem) y se lo pase al segundo comando (Rename-Item)

Rename-Item
Como su nombre indica, cambia el nombre del objeto.

{$_.name -replace «textobuscado»,»textoqueponer» }
Le indica al comeando Rename-Item que busque textobuscado y lo sustituya por textoqueponer. Si se quiere eliminar simplemente la parte del nombre con la cadena “textobuscado”, solo habría que sustituirlo por «».

Un parámetro interesante que se puede usar es –Whatif al final del comando. De esta manera, el sistema presenta una relación de los nombres de los ficheros que se van a cambiar y cómo van a quedar sin llegar a hacerlo.

Get-ChildItem -Filter «*textobuscado*» -Recurse | Rename-Item -NewName {$_.name -replace «textobuscado»,»textoqueponer» } -Whatif

En caso de que ya exista el fichero, da error ya que no deja cambiarle el nombre (pues sobreescribiría al actual): Rename-Item : No se puede crear un archivo que ya existe.

Por supuesto, se puede complicar más el resultado con otros comandos, combinaciones o filtros (recomiendo usar el comando Get-command y Get-help), pero para cambiar en lote el nombre de un grupo de ficheros según un patrón, funciona perfectamente y es muy cómodo.

Es más complicado explicarlo que hacerlo. Si simplemente copias y pegas el comando sustituyendo las cadenas a buscar y por la que hay que sustituirlas por lo que quieres hacer, verás qué fácil es cambiar los nombres de ficheros en lote incluso en subcarpetas.

Cómo cambiar los nombres de los ficheros en lote y por carpetas y subcarpetas con Bulk rename utility

Si no te gustan las líneas de comandos y las «pantallas feas» de texto, hay otra solución interesante para cambiar los nombres de ficheros en lote en Windows.

Bulk rename utility es un programa para Windows gratuito (para uso personal) muy completo que permite hacerlo de una manera sencilla y tiene una gran cantidad de opciones como se puede ver en el Manual de Bulk rename utility.

Si lo instalas y lo abres, aparecen muchas opciones (y en inglés) que «asustan» un poco pero para cambiar los nombres no hay más que tocar dos opciones que explico aquí:

Bulk rename utility

Bulk rename utility

Solo hay que:

  1. Abre el programa Bulk rename utility después de instalarlo.
  2. Busca con el explorador de archivos la carpeta donde están los documentos que quieres cambiar. En mi caso y en este ejemplo, se llama christiandve.com y contiene varios ficheros llamados «New text document – Copy (un número).txt». Lo que quiero es cambiar ese – Copy por OtroTexto (es un ejemplo).
  3. Seleccionar los archivos que se quieren modificar y en el campo «Replace» (teemplazar) pon lo que quieres buscar y en With (con) el texto con el que cambiarlo. Muy fácil. En la propia pantalla se ve cómo se llaman los archivos ahora y cómo se llamarán los nuevos.
  4. En la esquina inferior derecha está la opción de «Rename» o renombrar, lo que lanza el proceso tras pedir confirmación.
Bulk rename utility pide confirmación para cambiar el nombre de los ficheros en lote

Bulk rename utility pide confirmación para cambiar el nombre de los ficheros en lote

La aplicación como puedes ver permite muchas más opciones: expresiones regulares, cambiar fechas y horas de los ficheros, numeraciones, etc. pero escapan al alcance de este artículo. Viene explicadas en el Manual de Bulk rename utility y en la carpeta de instalación del programa viene algunos ejemplos (en la carpeta samples) muy ilustrativos.

Con estas tres opciones puedes ver cómo cambiar los nombres de fichero en lote en Windows de una manera muy sencilla y rápida, y da lo mismo si son 1, 2 o 10.000.

51 Responses to Windows: Cómo renombrar ficheros en lote (incluso en subcarpetas) fácilmente

  • Extremadamente útil e interesante como siempre. Gracias Christian. Lo pondré en práctica inmediatamente. Siempre hay ficheros descargados que interesa renombrar en masa. Eres un crack.

  • Gracias, no sabía nada de la existencia del Power Shell de Windows, siempre tiraba del CMD, a la antigua usanza (me hago viejo, informáticamente hablando)… :)

    Por cierto, la ventana del Bulk Rename Utility me ha encantado, me la voy a guardar para cuando mi jefe me diga que pongo demasiados controles en mis ventanas… jeje.

    Saludos

  • Hola Christian, necesito tu ayuda en twitter. Ojalá puedas ayudarme, por favor escribime aquí https://twitter.com/DecoBricolaje
    Saludos

  • Hola, Christian, en relación con el tema tratado, me tomo la libertad de sugerir tambien las «FileMenu Tools» https://www.lopesoft.com/index.php/en/products/filemenutools

  • Estimado, ojalá puedas darme una guía. Estoy tratando de renombrar por lotes vía powershell. Pero cada nombre debe tener una estructura determinada.
    Dependiendo de la cantidad de archivos que tenga cada carpeta, que agrege al final del nombre una letra,
    Ej
    1er archivo
    Concatena nombre+a
    2do archivo
    Concatena nombre+b
    ….
    n-ésimo archivo
    Concatena nombre+n.

    Y nombre = nombre de carpeta que contiene los archivos.
    Son archivos *.jpeg

    No se si tienes alguna idea de comando o ciclo que se pueda hacer ? Muchas gracias de antemano y muy útil el post

  • Que haríamos los que sólo manejamos la informática como una herramienta, sino fuera por los que sabéis mucho más de todo esto y compartís vuestros conocimientos.
    Mil gracias a ti y a tantos otros que nos hacéis más fáciles las cosas

  • Muy bueno, pero se pueden cambiar también nombres de carpetas?

  • Hola!
    lo que yo tengo es:
    una lista de 1000 libros con el nombre del fichero compuesto por: ‘nombre del autor’ – ‘nombre del libro’
    y otra lista de 3000 libros con el nombre del fichero compuesto por:’nombre del libro’ – ‘nombre del autor’

    Ya supones que lo que quiero es tener todos los ficheros con: ‘nombre del libro’ – ‘nombre del autor’

    Cómo puedo hacer para enviar la parte posterior del guión a la parte anterior y la parte anterior a la posterior (invertir las partes del nombre del fichero)

  • wow !!!, me has ahorrado miles de horas de trabajo. :-D Miles de millones de gracias Christian.

  • Hola, gracias por su ayuda, ahora necesitaria por favor saber, como revertir esto, que no se numeren las carpetas o archivos ni que tenan el mismo nombre,en W seven, gracias

  • Hola, recién encontré esto y es sumamente útil. Te quería preguntar cómo sería el comando para cambiar el principio de un archivo :)

  • Genial.Genial Genial!!!!!!!!!!!!!!!!!1
    No sabes lo agradecidisima que estoy, horas y horas de trabajo aburridiso que me has horrado.
    Funciona de maravilla, explicado sencillo. GRACIAS

  • Muy bueno, excelente artículo, el power shell me permitió remonombrar archivos a los que un virus les había puesto otra extensión y en varias sub carpetas

  • Cristian Buen dia, tengo una memoria que se reparo y en una carpeta de fotos con extension jpg las cambio a j01, j02, j03 tengo que renombrar una por una de ejemplo: archivo.j01 a archivo.jpg y luego archivo1.j02 a archivo1.j02, el problema no es le nombre, el problema es que la extension es diferente, espero me puedas ayudar, gracias

  • y si mis archivos están en un servidor y no en mi pc?

  • Hola,
    Estoy tratando de cambiar parte del nombre de varios archivos y me salen estos errores:

    PS C:\Users\asist.000\dropbox\ocsm> Get-ChildItem -Filter «*BolPagoInspeccion*» -Recurse | Rename-Item -NewName {$_.name
    -replace «BolPagoInspeccion»,»BolPagoInsp» }
    En línea: 1 Carácter: 94
    + … nspeccion*» -Recurse | Rename-Item -NewName {$_.name -replace «BolPag …
    + ~
    Debe proporcionar una expresión de valor después del operador ‘-replace’.
    En línea: 1 Carácter: 95
    + … | Rename-Item -NewName {$_.name -replace «BolPagoInspeccion»,»BolPag …
    + ~~~~~~~~~~~~~~~~~~~
    Token ‘«BolPagoInspeccion»’ inesperado en la expresión o la instrucción.
    En línea: 1 Carácter: 114
    + … | Rename-Item -NewName {$_.name -replace «BolPagoInspeccion»,»BolPago …
    + ~
    Falta un argumento en la lista de parámetros.
    + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedValueExpression

    PS C:\Users\asist.000\dropbox\ocsm>

  • tengo el siguiente problema a resolver, tengo una cantidad x en formato .CSV y tiene varios nombres, es decir no hay un patrón reconocible , mi solución es cambiarles el nombre a todos pero con un consecutivo inicial, es posible que sin importar el nombre original sea cambiado a un consecutivo como número?

  • mae el powershell es una porquería lo cobran y tras de que tiene que pagar uno por la licencia de windows

  • Get-ChildItem -Filter ‘*unknow*’ -Recurse | Rename-Item -NewName {$_.name -replace ‘unknow’,’unnamed’ }

  • Muchas gracias, me fué de utilidad

  • Muchas gracias! me has salvado la vida con el Bulk rename utility.

  • Hola!
    Maravillosa aportación. Me pregunto si se pueden encadenar instrucciones, por ejemplo quiero cambiar «texto1» por «TextoA» y «texto2» por «TextoB», y «texto3» por «TExtoC». PARa no hacerlo tres veces (he de sustituir muchas cosas más), se pueden encadenar sustituciones???

    GRacias

  • Muchas gracias Christian, me has salvado.

  • Hola, una consulta.
    Estoy ordenando archivos de imágenes y necesito cambiar lo siguiente. Tengo grupos de archivos de productos los cuales nombré:
    códigoproducto (1).jpg, códigoproducto (2).jpg, códigoproducto (3).jpg.
    Oviamente el » (1)», » (2)» los pone windows automáticamente.
    Hay forma de editar eso de forma que queda codigodelproducto_1.jpg, codigodelproducto_2jpg y así? Sin espacios y sin paréntesis.

    Saludos.-

    • Vine con la misma duda que tu y acabo de ver como hacerlo. Si partimos del fichero Msj_ (1).xml y queremos que quede Msj_1.xml has de hacer lo siguiente. En la casilla de Remove—>Chars pones «() » para eliminar paréntesis y espacios. Y ya está, así de fácil. Gran programa

  • Hola! he logrado renombrar el archivo, pero supongamos que su nombre consiste en 2 palabras y sólo le indico cambiar la primera palabra y quiero borrar lo demás ¿Cómo le hago?

  • Hola, estaba en búsqueda de poder cambiar guiones por puntos en una serie de archivos y me encontré con esta solución. Quise darle oportunidad a powershell pero no funcionó. Copié exactamente el texto y reemplacé según lo indicado pero aparece error. ¿Será que para esta operación no funciona (cosas especificas como puntos y guiones)? porque lo hice varias veces y siguen los errores. Eso si logré hacerlo con Bulk Rename… gracias!

    Además quiero cambiar el formato de fecha prefijo tipo dd.mm.yy a yyyy.mm.dd. Lo intente con las opciones de fecha que tiene Bulk Rename y las opciones son fecha de creación, fecha actual etc pero en este caso no me sirve porque son archivos escaneados y no tienen información «exif». ¿alguna idea? la vía que he tomado es usar reemplazar en bloque los que tienen las mismas fechas.

    Gracias, saludos.

    PS C:\Users\rafae\dropbox\archivos> Get-ChildItem -Filter «*-*» -Recurse | Rename-Item -NewName {$_.name -replace «-»,».» }
    En línea: 1 Carácter: 79
    + … ilter «*-*» -Recurse | Rename-Item -NewName {$_.name -replace «-»,».» …
    + ~
    Debe proporcionar una expresión de valor después del operador ‘-replace’.
    En línea: 1 Carácter: 80
    + … ter «*-*» -Recurse | Rename-Item -NewName {$_.name -replace «-»,».» }
    + ~~~
    Token ‘«-»’ inesperado en la expresión o la instrucción.
    En línea: 1 Carácter: 83
    + … ter «*-*» -Recurse | Rename-Item -NewName {$_.name -replace «-»,».» }
    + ~
    Falta un argumento en la lista de parámetros.
    + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedValueExpression

  • Hola!
    Tengo unas 4000subcarpetas con una media de 5 archivos cada una que debo renombrar con el nombre de la subcarpeta + 1 prefijo y un sufijo eje: 43.54400_001….me sirve tu fórmula?
    y otra pregunta: tengo 12 archivos por guardar en subcarpetas, hay algo para poder copiarlas en sus carpetas definitivas? ej: Archivo 43.54400_001 (archivo) y subcarpeta 0054400.

    Muchisimas gracias.

  • perdona son 12.000archivos, ya quiesiera yo que fuesen 12!

  • Excelente, que buen articulo!

  • Muchas gracias Christian, me has salvado.

Responder a Jaime Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Seguir a ChristianDvE en Twitter
 TwitterFacebook YouTubePinterestInstagramFeed
Recibe por correo electrónico los nuevos contenidos para no perderte ninguno (frecuencia muy baja). Responsable: Blog de ChristianDvE. Finalidad: enviar nuevos artículos y novedades por email. Legitimación: su consentimiento. Destinatarios: los datos los custodiará Mailrelay. Derechos: acceder, rectificar, limitar y suprimir sus datos
Sígueme (si quieres) también en Feedly
Archivos
Creative Commons
Los contenidos de este blog se encuentran bajo una Licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported.
Hosting por Raiola.