Magic Quadrant™ para la gestión de acceso privilegiado 2025: Netwrix reconocida por cuarto año consecutivo. Descarga el informe.

Plataforma
Centro de recursosBlog
Usando el Cmdlet Rename-Item para renombrar archivos en PowerShell

Usando el Cmdlet Rename-Item para renombrar archivos en PowerShell

Oct 9, 2024

¿Qué es el cmdlet Rename-Item?

El cmdlet Rename-Item en PowerShell se puede utilizar para cambiar el nombre de un elemento. Este elemento puede ser un archivo, directorio o cualquier objeto en una ruta. El cmdlet también se puede utilizar para renombrar elementos tanto localmente como en un entorno de red. Los usuarios también pueden realizar operaciones de renombrado por lotes, integrar tareas de renombrado en scripts para automatización e incluso gestionar requisitos de renombrado complejos con la ayuda de caracteres comodín y expresiones regulares. Por ejemplo, los usuarios pueden cambiar fácilmente nombres de archivos y extensiones o organizar archivos incorporando marcas de tiempo u otra información identificativa en sus nombres.

Rename-Item Cmdlet: Sintaxis

A continuación se muestra la sintaxis del cmdlet Rename-Item de PowerShell y sus parámetros de soporte, que ofrecen flexibilidad y control sobre el proceso de cambio de nombre.

      Rename-Item -Path <String> -NewName <String> [-Force] [-PassThru] [-WhatIf] [-Confirm] [<CommonParameters>]
      

A continuación se muestra el cmdlet básico de Rename-Item; este comando cambia el nombre de un archivo de “Report.txt” a “Report-26-09-2024.txt” en el directorio actual.

      Rename-Item -Path "C:\Temp\Report.txt" -NewName "Report-26-09-2024.txt"
      

Tutorial de Windows PowerShell Scripting (PDF) para Principiantes

Aprende más

Rename-Item: Parámetros

Comprender los parámetros de Rename-Item te ayudará a utilizar eficazmente el cmdlet para renombrar elementos. A continuación, se ofrece una explicación de todos los parámetros utilizados con este cmdlet en PowerShell.

Parámetros

Descripción

-Path

Especifica la ruta del elemento que se va a renombrar. Puede ser la ruta completa o relativa al directorio actual. El elemento en la ruta puede ser un archivo, carpeta o cualquier otro tipo que admita el cambio de nombre. Este parámetro es obligatorio.

-LiteralPath

Proporciona una alternativa a -Path. Se utiliza para especificar la ruta cuando los nombres de los elementos incluyen caracteres especiales que PowerShell podría interpretar de manera diferente, como “[“ o “]”. A diferencia de -Path, no se permiten caracteres comodín y la cadena especificada se utiliza exactamente como está.

-NewName

Este parámetro obligatorio representa el nuevo nombre del elemento. Es importante señalar que esto debe ser solo el nombre del elemento, no una ruta. Si estás renombrando un archivo y deseas mantener su tipo de archivo, asegúrate de incluir la extensión de archivo apropiada en el nuevo nombre.

-Credential

Aunque no se usa comúnmente en scripts para la gestión de archivos locales, este parámetro opcional permite que el cmdlet se ejecute utilizando un conjunto de credenciales especificadas por el usuario. Esto puede ser útil al trabajar con archivos en un recurso compartido de red o en cualquier escenario que requiera permisos específicos.

-Force

Este parámetro permite al cmdlet renombrar elementos de solo lectura, ocultos o de otro modo protegidos. Anula las restricciones que generalmente impedirían que la operación tuviera éxito.

-PassThru

Por defecto, Rename-Item no produce ningún objeto. Cuando se utiliza el parámetro -PassThru, el cmdlet devuelve el objeto que ha sido renombrado. Esto puede ser útil para encadenar el elemento renombrado a más comandos o para la verificación inmediata de la operación.

-WhatIf

Esta función de seguridad simula la ejecución del cmdlet sin realizar la operación de cambio de nombre. Muestra lo que sucedería si el cmdlet se ejecutara, proporcionando una vista previa de los resultados. Esto puede ser particularmente útil en scripts u operaciones por lotes donde se desea evitar consecuencias no deseadas.

-Confirmar

Solicita la confirmación del usuario antes de ejecutar el cmdlet. Esto puede ser útil en scripts interactivos o al realizar cambios significativos, proporcionando una capa adicional de seguridad contra acciones no intencionadas.

Ejemplos de uso de Rename-Item con parámetros

A continuación se presentan algunos ejemplos de Rename-Item con diferentes parámetros; estos ejemplos mostrarán cómo renombrar elementos bajo diversas condiciones, proporcionando una comprensión práctica de cómo aplicar el cmdlet en escenarios del mundo real.

A continuación se muestra un cmdlet básico, que cambia el nombre de un único archivo de “Design.txt” a “Report.txt”.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "Report.txt"
      

El parámetro -Force renombra archivos de solo lectura o ocultos, como se muestra en el ejemplo a continuación.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "Report.txt" -Force
      

El parámetro -PassThru devuelve un objeto que representa el elemento renombrado, el cual puede ser encadenado a otro cmdlet; después de renombrar, obtenemos inmediatamente todos los detalles del elemento renombrado.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "Report.txt" -PassThru | Get-Item
      
Image

Para ver qué sucedería sin realizar el cambio de nombre, utilice el parámetro -WhatIf. Esto es especialmente útil para pruebas en scripts. Después de confirmar el resultado, ejecute el cmdlet sin el parámetro -WhatIf para el proceso de cambio de nombre real.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "C:\Backups\NewDesign.txt" -WhatIf
      
Image

La salida describirá la acción pero no la ejecutará.

Si desea que se le solicite confirmación antes de que se realice el cambio de nombre, utilice el parámetro Confirm. Esto es útil para escenarios donde un cambio de nombre accidental podría tener consecuencias significativas.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "Report.txt" -Confirm
      

Se le solicitará confirmar la acción antes de proceder.

Image

Parámetros Path vs. LiteralPath

Cuando trabaje con cmdlets que involucran operaciones de archivos y directorios, a menudo se encontrará con dos parámetros, -Path y -LiteralPath. Comprender las diferencias entre estos dos parámetros es esencial para gestionar tareas del sistema de archivos de manera efectiva, especialmente al tratar con nombres de archivos o rutas que incluyen caracteres especiales o palabras reservadas.

-Path

-Path es el parámetro más comúnmente utilizado para especificar la ubicación de los elementos. Admite comodines (*), permitiendo el emparejamiento de patrones y la selección de múltiples elementos con un solo comando. PowerShell interpreta caracteres especiales, incluyendo caracteres comodín. Esto significa que si los nombres de tus archivos o rutas incluyen caracteres como “[],(),{}”, PowerShell podría tratarlos como parte de un patrón comodín, lo que podría llevar a un comportamiento inesperado.

Ejemplo

      Rename-Item -Path C:\Logs\*
      

-LiteralPath

-LiteralPath se utiliza para especificar la ubicación de los elementos sin interpretar ningún carácter como comodines. Puede ingresar este parámetro al tratar con nombres de archivos o rutas que incluyen caracteres especiales, asegurando que PowerShell trate la cadena de entrada literalmente sin intentar hacer coincidencias de patrones.

Ejemplo

      Rename-Item -LiteralPath “C:\Files\[Design].txt”
      

Ejemplos comunes de uso de Rename-Item

Renombrar y mover archivos

No puedes usar el cmdlet Rename-Item para renombrar archivos a través de PowerShell y moverlos a una ubicación diferente. Recibirás el siguiente error al hacer eso.

Image

Debe usar el cmdlet Move Item para mover el archivo y al mismo tiempo cambiar el nombre del archivo en el destino.

A continuación se muestra cómo puede usar cmdlet para mover y renombrar archivos.

      Move-Item -Path "C:\Backups\Design.txt" -Destination "C:\Archive\NewDesign.txt"
      

Renombrar archivos ocultos y de solo lectura

Para renombrar un archivo oculto o de solo lectura, utilice el parámetro -Force con el cmdlet Rename-Item. Este parámetro permite que PowerShell ignore el atributo de solo lectura durante el proceso de cambio de nombre.

      Rename-Item -Path "C:\Documents\ReadOnlyFile.txt" -NewName "RenamedFile.txt" -Force
      

Renombrar archivos en lote

El cambio de nombre de archivos por lotes utilizando PowerShell es una tarea común al gestionar grandes conjuntos de datos, organizar archivos o simplemente al limpiar directorios.

Si necesita cambiar la extensión de múltiples archivos, por ejemplo de “.txt” a “.log”, puede utilizar el siguiente script.

      Get-ChildItem -Path "C:\Documents" -Filter "*.txt" | ForEach-Object {

    $newName = [io.path]::ChangeExtension($_.Name, ".log")

    Rename-Item -Path $_.FullName -NewName $newName

}
      

O puedes utilizar el cmdlet de PowerShell para renombrar múltiples archivos y extensiones de archivo a continuación sin añadir un bucle para cada archivo.

      Get-ChildItem -Path "C:\Documents\*.txt" | Rename-Item -NewName { $_.Name -replace ".txt",".log" }
      

Añadiendo prefijos y sufijos

Usando el comando de PowerShell para renombrar todos los archivos en un directorio, puedes agregar prefijos o sufijos a los nombres de los archivos. Esta es una tarea común al organizar archivos, versionar documentos o preparar datos para archivar. Utilizando PowerShell, puedes usar los cmdlets Get-ChildItem y Rename-Item para agregar prefijos y sufijos y hacerlo.

Puede utilizar el siguiente script para agregar un prefijo a todos los archivos en un directorio específico.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ("Project_" + $_.Name)

}
      

De manera similar, puede usar el siguiente script para agregar un sufijo antes de la extensión del archivo.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ($_.BaseName + "_Final" + $_.Extension)

}
      

Agregue el prefijo “Backup_” y el sufijo “_2024” a todos los archivos .txt.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ("Backup_" + $_.BaseName + "_2024" + $_.Extension)

}
      

Renombrar archivos con marcas de tiempo

Renombrar archivos para incluir marcas de tiempo puede ser increíblemente útil para crear copias de seguridad, organizar archivos o rastrear versiones de archivos.

Este ejemplo demuestra cómo agregar una marca de tiempo en el formato “yyyyMMdd_HHmmss” como sufijo a todos los archivos “.txt” en un directorio específico.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"

    $newName = $_.BaseName + "_" + $timestamp + $_.Extension

    Rename-Item -Path $_.FullName -NewName $newName

}
      

Si prefiere la marca de tiempo al principio del nombre del archivo, puede modificar ligeramente el script de la siguiente manera.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"

    $newName = $timestamp + "_" + $_.Name

    Rename-Item -Path $_.FullName -NewName $newName

}
      

Si desea renombrar todos los archivos .txt en el directorio C:\Documents, agregue la marca de tiempo de creación al principio.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $timestamp = $_.CreationTime.ToString("yyyyMMdd_HHmmss")

    Rename-Item -Path $_.FullName -NewName ("$timestamp" + "_" + $_.Name)

}
      

Si desea agregar la marca de tiempo de modificación como sufijo a todos los archivos .txt.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $timestamp = $_.LastWriteTime.ToString("yyyyMMdd_HHmmss")

    Rename-Item -Path $_.FullName -NewName ($_.BaseName + "_" + $timestamp + $_.Extension)

}
      

Si desea agregar la marca de tiempo de creación como prefijo y la marca de tiempo de última modificación como sufijo para todos los archivos .docx.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $creationTimestamp = $_.CreationTime.ToString("yyyyMMdd_HHmmss")

    $modifiedTimestamp = $_.LastWriteTime.ToString("yyyyMMdd_HHmmss")

    Rename-Item -Path $_.FullName -NewName ("$creationTimestamp" + "_" + $_.BaseName + "_$modifiedTimestamp" + $_.Extension)

}
      

Manejo de colisiones de nombres de archivo

Manejar colisiones de nombres de archivo es importante al automatizar operaciones de archivos, como renombrar o mover archivos, para evitar sobrescribir archivos existentes sin intención. Puedes verificar si un archivo con el nuevo nombre ya existe. Si es así, puedes modificar el nuevo nombre (por ejemplo, añadiendo un contador o una marca de tiempo adicional).

Ejemplo: Agregue un contador y fecha de creación para colisiones

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $baseName = $_.BaseName

    $extension = $_.Extension

    $creationTimestamp = $_.CreationTime.ToString("yyyyMMdd_HHmmss")

    $newName = "$baseName" + "_$creationTimestamp" + "$extension"

    # Initialize a counter for collisions

    $counter = 1

    # Check if the new name already exists

    while (Test-Path -Path (Join-Path -Path $_.DirectoryName -ChildPath $newName)) {

        $newName = "$baseName" + "_$creationTimestamp" + "_$counter" + "$extension"

        $counter++

    }

    Rename-Item -Path $_.FullName -NewName $newName

}
      

Explicación

El script anterior recupera todos los archivos .txt. Construye un nuevo nombre con una marca de tiempo como fecha de creación del archivo, luego verifica si el nuevo nombre ya existe. Si es así, añade un contador, por ejemplo, “_1”, “_2”, etc. hasta que se encuentra un nombre único.

Renombrar claves del Registro

Para renombrar una clave del registro usando PowerShell, puede utilizar el cmdlet Rename-Item y exportar la clave que planea renombrar antes de intentar ejecutar el cmdlet. Este es un paso preventivo para asegurar una copia de seguridad en caso de que algo salga mal.

      Rename-Item -Path "HKLM:\Software\MyCompany\Advertising" -NewName "Marketing"
      

Tutorial de Microsoft 365: Guía completa de administración

Aprende más

Utilice Expresiones Regulares para Renombramientos Complejos

Comando de PowerShell para renombrar archivos en una carpeta

Usar el operador -replace es una manera poderosa de renombrar archivos en una carpeta, aplicando patrones de expresiones regulares (regex). Este enfoque puede ser beneficioso para operaciones de renombrado masivo donde necesitas agregar, eliminar o modificar partes de nombres de archivos o directorios basándote en patrones específicos.

Por ejemplo, tienes un montón de archivos nombrados como “report1_2023-04-01.txt”, “report2_2023-04-02.txt”, etc., y quieres eliminar las marcas de fecha de sus nombres junto con el guion bajo (_).

El siguiente comando encuentra todos los archivos .txt cuyos nombres comienzan con “report*” seguido de una marca de fecha y los renombra eliminando la marca de fecha, dejando solo “report.txt” con el número intacto, por ejemplo, “report1.txt”, “report2.txt”.

      Get-ChildItem -Path "C:\Backups"-Filter "report*.txt" | Rename-Item -NewName {$_.Name -replace '_\d{4}-\d{2}-\d{2}', ''}
      

Numeración secuencial

Agregar numeración secuencial a los nombres de archivos utilizando el cmdlet Rename-Item requiere algo de programación para implementar un contador mientras se iteran los archivos. Esto puede ser particularmente útil para organizar archivos en un orden específico o asegurar su unicidad.

Si desea renombrar archivos para incluir números secuenciales (por ejemplo, “Image_1.jpg”, “Image_2.jpg”), puede utilizar el siguiente script.

      $counter = 1

Get-ChildItem -Path "C:\Images" -Filter "*.jpg" | ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ("Image_$counter.jpg")

    $counter++

}
      

Contenido relacionado seleccionado:

Errores comunes y solución de problemas de Rename-Item

Es posible que encuentres algunos errores comunes o problemas al trabajar en PowerShell para renombrar archivos, directorios y claves de registro. Comprender estos posibles inconvenientes y cómo solucionarlos puede ayudar a garantizar que tus tareas de renombrado de archivos y directorios se realicen sin problemas. A continuación, se presentan algunos errores comunes y consejos para la solución de problemas.

Error de archivo no encontrado

PowerShell no pudo encontrar la ruta porque no existe. Verifique si hay errores tipográficos en la ruta del archivo. Utilice el cmdlet Test-Path para verificar si el archivo existe antes de intentar renombrarlo.

      if (Test-Path "C:\Backups\design.txt") {

    Rename-Item -Path "C:\Backups\Design.txt" -NewName "NewDesign.txt"

} else {

    Write-Host "File does not exist."

}
      

Archivo en uso

El cmdlet no puede acceder al archivo porque otro proceso lo está utilizando. Este error ocurre si el archivo que intentas renombrar está abierto en otra aplicación. Cierra el archivo en cualquier otra aplicación que pueda estar usándolo. Si el problema persiste, puede que necesites terminar procesos que hayan bloqueado el archivo o reiniciar el sistema para que el archivo se desbloquee.

Error de acceso denegado

Se deniega el acceso a la ruta, o no se tienen los permisos suficientes para modificar el archivo o la clave del registro.

Para evitar este error, ejecute PowerShell como administrador o verifique los permisos del archivo o clave y ajústelos si es necesario.

Error de ruta demasiado larga

La ruta especificada, el nombre del archivo o ambos son demasiado largos. Windows tiene un límite de longitud de ruta máximo (típicamente 260 caracteres). Acorte la ruta moviendo los archivos a un nivel de directorio superior.

Error de destino ya existente

No se puede renombrar porque el destino ya existe. El nuevo nombre de archivo ya existe en el directorio de destino. Compruebe si el archivo de destino existe utilizando Test-Path. Modifique su script para gestionar conflictos, como añadir un sufijo o incrementar un número.

Error de caracteres no válidos

El nombre del archivo, directorio o registro es incorrecto. El nuevo nombre del archivo contiene caracteres no válidos. Asegúrese de que el nuevo nombre no incluya caracteres no válidos. Utilice expresiones regulares para eliminar o reemplazar caracteres no válidos antes de renombrar.

Conclusión

Puede utilizar el comando Rename-Item en PowerShell para cambiar el nombre de un archivo, directorio u otro elemento en el sistema de archivos. Este comando no altera el elemento en sí, solo su nombre. Puede usarlo en PowerShell para renombrar elementos especificando la ruta actual y el nuevo nombre. El comando también ofrece opciones para forzar la operación, mostrar lo que sucedería sin cambiar realmente el nombre del elemento y solicitar confirmación antes de renombrar. Este comando es útil para automatizar tareas de gestión de archivos y directorios, por ejemplo, agregar prefijos, sufijos y numeración secuencial a los archivos.

Netwrix Directory Manager

Preguntas frecuentes

¿Qué es el cmdlet Rename-Item en PowerShell?

El cmdlet Rename-Item se utiliza para renombrar elementos usando PowerShell, por ejemplo, archivos o claves de registro. Tiene muchos parámetros compatibles, por ejemplo, -Path, -Force, -WhatIf, -Confirm o -Passthru para ser utilizados en diferentes escenarios.

¿Puedo mover un archivo y renombrarlo simultáneamente con Rename-Item?

No, los archivos no se pueden mover y renombrar simultáneamente usando Rename-Item. Debes usar Move-Item para mover primero el archivo y especificar el destino con un nuevo nombre de archivo.

Compartir en

Aprende más

Acerca del autor

Asset Not Found

Kevin Horvatin

Arquitecto Principal de Software

Kevin Horvatin es un Arquitecto de Software Principal en Netwrix y responsable de Netwrix Privilege Secure. Desarrollador de software por más de 20 años, ha trabajado con PowerShell y C# desde que fueron introducidos.