HOWTO · Batch

Cómo cambiar el nombre de un archivo en un script por lotes

Aprende a cambiar el nombre de uno o varios archivos en un script por lotes de Windows con ren, rename, comodines, rutas, variables y bucles for.

En esta página

Usa el comando ren (o rename) en un archivo por lotes de Windows para cambiar el nombre de un archivo sin moverlo. El comando funciona en cmd.exe, y un archivo .bat o .cmd puede aplicarlo repetidamente a los archivos coincidentes. Los ejemplos siguientes usan el directorio actual si no se incluye una ruta de origen.

Comando básico para cambiar nombres en un script por lotes

La sintaxis es:

ren <old-name> <new-name>

rename es la forma más larga y equivalente de ren. Pon entre comillas los nombres que contengan espacios:

@echo off
ren "old report.txt" "new report.txt"

Si tiene éxito, cmd.exe normalmente no muestra ningún mensaje. Verifica el resultado con dir o comprobando que exista el nuevo nombre. El destino es un nombre nuevo, no una segunda ruta: ren no puede mover un archivo a otro directorio o unidad. Usa move cuando la operación también deba cambiar de directorio.

Cambiar el nombre de varios archivos con comodines

Los comodines permiten que un comando coincida con un conjunto de nombres de origen. Este comando cambia la extensión de cada archivo .txt del directorio actual y conserva su nombre base:

@echo off
ren "*.txt" "*.bak"

Por ejemplo, notes.txt se convierte en notes.bak y report.txt en report.bak. El * del destino corresponde al nombre base del origen; no asigna literalmente el nombre *.bak a todos los archivos. El comodín ? coincide con una posición de carácter y permite restringir un patrón, por ejemplo ren "log?.txt" "archived-?.txt".

Cambiar el nombre de un archivo en un directorio específico

El origen puede incluir una unidad y un directorio:

@echo off
ren "C:\Work\incoming\report.txt" "report-old.txt"

El archivo renombrado permanece en C:\Work\incoming. No escribas un directorio en el segundo argumento, como ren "C:\Work\incoming\report.txt" "C:\Work\archive\report.txt"; eso sería mover el archivo y no forma parte de la sintaxis de ren. Ejecuta el archivo por lotes con permisos que permitan modificar el directorio de origen.

Usar variables y un bucle for

Las variables son útiles cuando otro comando construye el nombre antiguo o nuevo, o cuando lo introduce un usuario. Pon entre comillas la asignación para evitar espacios sobrantes:

@echo off
set "oldname=old report.txt"
set "newname=reviewed report.txt"
ren "%oldname%" "%newname%"

Para añadir un prefijo a cada archivo .txt, usa un bucle for. %%F es la forma de la variable de bucle en un archivo por lotes, y %%~nxF se expande al nombre y la extensión originales:

@echo off
for %%F in (*.txt) do ren "%%F" "new_%%~nxF"

Prueba esto primero en una copia del directorio. Un destino que ya exista puede hacer que el cambio de nombre falle, y un patrón de origen sin coincidencias no renombra nada. El bucle también puede encontrar una colisión a mitad del proceso; revisa el directorio después del comando y conserva copias de seguridad cuando los nombres sean importantes.

Preguntas frecuentes

¿ren y rename son comandos diferentes?

No. En cmd.exe, rename es la forma larga de ren.

¿Por qué falló el cambio de nombre?

Comprueba que el origen exista, que el destino no esté en uso, que las comillas sean correctas y que el archivo por lotes tenga acceso al directorio. Un origen inexistente produce un error en lugar de crear un archivo nuevo. Una ruta de destino también es inválida porque ren cambia el nombre dentro del directorio de origen.

¿Puedo cambiar el nombre de un directorio?

Sí, ren puede cambiar el nombre de un directorio, pero el destino tampoco puede especificar otra ruta. Usa move para reubicarlo.