JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Truco: cómo borrar todas las subcarpetas de una carpeta excepto unas cuantas

Borrar carpetas o archivos puede parecer una trivialidad y lo es en la mayoría de los casos. Como casi todo en la vida la cosa se complica con los grandes números. Si tenemos que borrar una gran carpeta con miles de archivos y muchos gigas de tamaño la cosa llevará tiempo y además se necesita tener bastante espacio libre en disco para hacerlo (el porqué de esto lo desconozco. Parece una paradoja pero es así).

Hoy me he encontrado en un atolladero así. Un pequeño NAS que tenemos en el DataCenter para hacer algunas copias de seguridad estaba repleto. En una carpeta conflictiva en concreto había unas 150 subcarpetas cada una de ellas con varios gigas, y miles de archivos y una estructura compleja de varias decenas de subcarpetas. Necesitaba borrar la mayor parte de ellas para hacer espacio (ya no se necesitaban) pero no lo podía conseguir desde el explorador de Windows. El proceso de todas formas iba a durar mucho tiempo. ¿Cómo puedo automatizar esto? El mayor problema además es que no tenía que borrar todas sino "casi" todas. En informática los "casi" son siempre los que suponen un reto ¿no? :-)

Bueno, la solución más rápida y sencilla fue usar la línea de comandos. Ábrela y vete a la carpeta en la que quieres trabajar.

Lo primero es crear un archivo de texto con la lista de subcarpetas dentro de mi carpeta problemática. Necesitaba sólo los nombres de los archivos, sin nada más. El comando necesario es este:

dir /ad /b > carpetas.txt

De este modo creamos un archivo carpetas.txt que contendrá los nombres de todas las carpetas de la carpeta actual.

Ahora abre el archivo de texto y borra los nombres de las carpetas que quieres conservar. Con esto consigues una lista de carpetas a borrar. Ahora sólo necesitas iterar por ellas en un bucle eliminándolas, para lo que sólo tienes que escribir esto en la línea de comandos:

For /f "delims=" %n in (carpetas.txt) do rmdir /s /q "%n"

¡Listo! Tardará un montón también si hay muchas carpetas y son muy grandes, pero te hará el trabajo sin poner mucho de tu parte y de manera mucho más eficiente que usando la línea de comandos y siendo mucho más selectivo sobre lo que vas a borrar.

Yo, como es evidente, no soy especialista en sistemas ni mucho menos, así que espero que esto le sirva a otros que tampoco lo sean y a veces "les toque" :-)

Nota: si quieres usar la última línea dentro de un archivo .bat y no directamente sobre la línea de comandos deberás usar doble porcentaje en lugar de uno simple para el nombre de la variable de bucle, así:

For /f "delims=" %%n in (carpetas.txt) do rmdir /s /q "%%n"

o de otro modo no te funcionará.

José Manuel Alarcón
Banner

Comentarios (3) -

Dark Molinex

Genial, yo que no entiendo nada de computación siempre ando averiguando como poder hacer cosas que se me van ocurriendo por tincada y este truco me parece super bueno. saludos D.M.

Responder

Bolivia Isrrael Vicvei

cool, it works !

Responder

Quisiera un video tutorial, porque no comprendo bien como realizar los pasos, plissss!

Responder

Agregar comentario