Saltar al contenido

¿Cómo puedo renombrar archivos de forma masiva en PowerShell?

Te sugerimos que pruebes esta resolución en un entorno controlado antes de pasarlo a producción, saludos.

Solución:

Del ejemplo 4 en la documentación de ayuda de Rename-Item recuperado con el comando:

get-help Rename-Item -examples

Ejemplo:

Get-ChildItem *.txt| Rename-Item -NewName  $_.Name -replace '.txt','.log' 

Tenga en cuenta la explicación en la documentación de ayuda para la barra invertida de escape en el comando de reemplazo debido a que usa expresiones regulares para encontrar el texto para reemplazar.

Para asegurar la expresión regular -replace operador coincide sólo con una extensión al final de la stringincluye la expresión regular final destring personaje $.

Get-ChildItem *.txt | Rename-Item -NewName  $_.Name -replace '.txt$','.log' 

Esto soluciona el caso mencionado por @OhadSchneider en los comentarios, donde podríamos tener un archivo llamado lorem.txt.txt y queremos terminar con lorem.txt.log en vez de lorem.log.log.

Ahora que la expresión regular está lo suficientemente ajustada e inspirada en la respuesta de @etoxin, podríamos hacer que el comando sea más útil de la siguiente manera:

Get-ChildItem | Rename-Item -NewName  $_.Name -replace '.txt$','.log' 

Es decir, no hay necesidad de filtrar antes de la tubería si nuestra expresión regular filtra lo suficiente después de la tubería. Y alterando el comando string (por ejemplo, si copia el comando anterior y ahora quiere usarlo para cambiar la extensión de los archivos ‘.xml’) ya no es necesario en dos lugares.

Esto también funciona bien cuando estás en el directorio deseado.

Dir | Rename-Item –NewName  $_.name –replace "old","new" 

Las respuestas existentes sugieren la -replace operador, pero ¿y si el archivo se llama a.xml.xml? Ambas cosas .xml las subcadenas serán reemplazadas y el resultado final sería a.tmp.tmp. Afortunadamente, hay un método .NET para esto:

Dir *.xml | rename-item -newname  [io.path]::ChangeExtension($_.name, ".tmp")  

(Manish Kumar era cercano a GetFileNameWithoutExtension pero esto es más elegante y probablemente un poco más eficiente, no es que importe demasiado en este caso)

Finalizando este artículo puedes encontrar las explicaciones de otros gestores de proyectos, tú asimismo tienes el poder dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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