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.
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”:
Teclear el nombre deseado y pulsar enter.
Renombra los ficheros de manera correlativa añadiendo un número entre paréntesis para diferenciarlos.
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.
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):
(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.
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.
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í:
Solo hay que:
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.
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 por el comentario, Fran.
Saludos.
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
Es muy interesante el PowerShell. Es otro mundo.
Gracias por la visita y el comentario, Schezo.
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
Habrá que probarlo.
Estupendo y saludos.
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
Estoy con al misma duda que Mauricio, como podemos renombrar con letras ascendentes al final?
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
Gracias por tu comentario, Ángel Luis.
Muy bueno, pero se pueden cambiar también nombres de carpetas?
Sí.
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)
Deberías encontrar el patrón buscando el guión y cambiar el nombre invirtiendo los términos.
wow !!!, me has ahorrado miles de horas de trabajo. :-D Miles de millones de gracias Christian.
:D
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 :)
Es lo mismo, pero cambiando la parte a modificar siguendo el patrón.
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
Me alegro, Marisa.
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
Estupendo.
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
Hola
De manera sencilla se me ocurre hacer un «ren *.j01 *.jpg» en un bat con un bucle de 00 a 10 y luego de 10 en adelante.
También se podría hacer con PowerShell, pero tendría que pensar cómo.
Saludos.
y si mis archivos están en un servidor y no en mi pc?
Si la unidad está montada con una letra, se puede hacer igual.
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>
Revisa los parámetros del comando.
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?
Sí. Selecciona todos, dale a renombrar y listo.
mae el powershell es una porquería lo cobran y tras de que tiene que pagar uno por la licencia de windows
PowerShell viene incluido en Windows. No te cobran nada.
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.
Estupendo.
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
Claro.
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.
Sí, puede hacerse de forma recursiva.
perdona son 12.000archivos, ya quiesiera yo que fuesen 12!
Excelente, que buen articulo!
Muchas gracias Christian, me has salvado.